|
#include "ET199Dog.h"
int ET199Dog::ReadEtfsFile(int tCurrETnum,char *etfsfileIdname,char *password,char *etfsfiledata)
{
//讀取
DWORD dwOutLen = 0;
WORD wOffset=0; //從偏移位置為10的地方開始讀取
int datalen=100;//數(shù)據(jù)長度
char buffer[100]="";
buffer[0] = 1; //為1,表示讀文件
buffer[1] = (BYTE)datalen; //讀取數(shù)據(jù)長度
FlipBuffer((unsigned char*)&wOffset, 2); //C51中WORD與PC中順序不同,先倒序
memcpy(buffer+2, &wOffset, 2); //將cBuffer中的下標(biāo)為2,3中設(shè)置為偏移量
memcpy(buffer+4, password, 8); //偏移4字節(jié),要寫入8位密碼
datalen=100;
dwRet = ETExecute(&ETContextList[tCurrETnum],etfsfileIdname, buffer,datalen, etfsfiledata,datalen, &dwOutLen);
if(dwRet)
{
printf("調(diào)用讀etfs文件函數(shù)出錯\n");
return 0;
}
//返回長度為1時,C51中出錯
if(dwOutLen == 1)
{
printf("讀etfs文件出錯\n");
return 0;
}
return 1;
}
int ET199Dog::WriteEtfsFile(int tCurrETnum,char *etfsfileIdname,char *password,char *etfsfiledata)
{
//寫入
DWORD wOffset = 0; //從偏移位置為10的地方開始寫入
DWORD dwOutLen = 0;
char buffer[100]="";
int datalen=0;//數(shù)據(jù)長度
datalen=100;//數(shù)據(jù)長度
buffer[0] = 0; //為0,表示寫文件/為1,表示讀文件
buffer[1] = (BYTE)datalen; //寫入數(shù)據(jù)長度
FlipBuffer((unsigned char*)&wOffset, 2); //C51中WORD與PC中順序不同,先倒序
memcpy(buffer+2, &wOffset, 2); //將cBuffer中的下標(biāo)為2,3中設(shè)置為偏移量
memcpy(buffer+4, password, 8); //偏移4字節(jié),要寫入8位密碼
memcpy(buffer+4+8, etfsfiledata, 100-4-8); //一定要偏移4字節(jié),要寫入的數(shù)據(jù)
//+4:將系統(tǒng)偏移的位數(shù)也加上
dwRet = ETExecute(&ETContextList[tCurrETnum],etfsfileIdname,buffer,datalen,etfsfiledata,datalen,&dwOutLen);
if(dwRet)
{
printf("調(diào)用寫etfs文件函數(shù)出錯\n");
return 0;
}
//返回不是0時,C51中有錯誤
if(etfsfiledata[0] != 0)
{
printf("寫etfs文件出錯\n");
return 0;
}
return 1;
}
//在當(dāng)前工作目錄下創(chuàng)建文件
int ET199Dog::CreateDataFile(int tCurrETnum,char *filename,int filesize)
{
//在當(dāng)前工作目錄下創(chuàng)建文件 ID 為 0x1008 的內(nèi)部數(shù)據(jù)文件,
//文件大小為:10000 字節(jié)
dwRet = ETCreateFile(&ETContextList[tCurrETnum], filename,
filesize, FILE_TYPE_DATA);
if(dwRet != ET_S_SUCCESS)
{
printf("在當(dāng)前工作目錄下創(chuàng)建文件出錯:0x%08x\n", dwRet);
return 0;
}
return 1;
}
//寫數(shù)據(jù)入文件(未證實)
//自動檢測當(dāng)前文件是否存在
int ET199Dog::WriteDataToFile(int tCurrETnum,char *filename,BYTE *writedata)
{
//自動檢測當(dāng)前文件是否存在
//向當(dāng)前工作目錄中 ID 為 0x1008 的文件中,從第 0 個字節(jié)開始寫入“HELLO”
dwRet = ETWriteFile(&ETContextList[0],
filename, 0, writedata, lstrlen((const char*)writedata));
if(dwRet != ET_S_SUCCESS)
{
printf("寫數(shù)據(jù)入文件出錯:0x%08x\n", dwRet);
return 0;
}
return 1;
}
//運行 ET199 硬件內(nèi)文件
int ET199Dog::RunDataFile(int tCurrETnum,char *filename,char *oldpassword,char *newpassword,
DWORD &filedata)
{
int tlen=strlen(oldpassword);
int tlen1=strlen(newpassword);
//運行 ET199 硬件內(nèi)文件 ID 為 0x0001 的可執(zhí)行文件
dwRet = ETExecute(&ETContextList[tCurrETnum], filename,
oldpassword,tlen, newpassword, tlen1, &filedata);
if(dwRet != ET_S_SUCCESS)
{
printf("運行 ET199 硬件內(nèi)文件出錯:0x%08x\n", dwRet);
return 0;
}
return 1;
}
/*
//C51程序,利用密碼,讀寫加密DOG文件內(nèi)容源碼
#include "et199.h"
#include <string.h>
//讀寫文件示例
//輸入時,前4個字節(jié)為信息:
//第一個字節(jié)為讀寫標(biāo)志,0為寫文件,1為讀文件
//第二個字節(jié)為讀寫長度
//第三和第四個字節(jié)為偏移位置
void main()
{
BYTE xdata bRes = 0;
BYTE xdata bFlag = 0;
BYTE xdata bLen = 0;
WORD xdata wStart = 0;
HANDLE xdata hFile = 0;
BYTE xdata pbData[256]="abcd";
BYTE xdata password[8]="";
//輸入的格式
//第一個字節(jié)表示操作,0為寫文件,1為讀文件
//第二個字節(jié)表示讀寫文件的長度
//第三,四個字節(jié)表示偏移位置,即從文件的哪里開始讀寫
//在寫文件時,后面為要寫入的數(shù)據(jù)。在讀文件時,后面沒用,因此讀文件時,外部程序可以只輸入前4個字節(jié)
memcpy(&bFlag, pbInBuff, 1);//為0,表示寫文件/為1,表示讀文件
memcpy(&bLen, pbInBuff+1, 1);//讀寫數(shù)據(jù)的長度
memcpy(&wStart, pbInBuff+2, 2);//將cBuffer中的下標(biāo)為2,3中設(shè)置為偏移量
memcpy(password,pbInBuff+4, 8);//分解出密碼
memcpy(pbData, pbInBuff+4+8,bLen);//分解出內(nèi)容
if(strcmp(password,"PASSWORD")==0)
{
//寫文件
if(bFlag == 0)
{
//先打開文件
bRes = _open(0x1008, &hFile);
if(bRes != 0)
{
//內(nèi)部數(shù)據(jù)文件不存在,創(chuàng)建文件,這里創(chuàng)建一個長度為1024的數(shù)據(jù)文件
if(bRes == 5)
{
bRes=_create(0x1009, 1024, FILE_TYPE_DATA, CREATE_OPEN_ALWAYS, &hFile);
if(bRes != 0)
{
_set_response(1,&bRes);
_exit();
}
}
else
{
_set_response(1,&bRes);
_exit();
}
}
//寫入數(shù)據(jù)
bRes = _write(hFile, wStart, bLen, pbData);
if(bRes != 0)
{
_close(hFile);
_set_response(1,&bRes);
_exit();
}
_close(hFile);
//返回bRes應(yīng)為0,表明寫入成功
_set_response(1,&bRes);
_exit();
}
//讀文件
if(bFlag == 1)
{
//先打開文件
bRes = _open(0x1009, &hFile);
if(bRes != 0)
{
_set_response(1,&bRes);
_exit();
}
//讀取數(shù)據(jù)
bRes = _read(hFile, wStart, bLen, pbData);
if(bRes != 0)
{
_close(hFile);
_set_response(1,&bRes);
_exit();
}
_close(hFile);
//將結(jié)果返回給外部程序
_set_response(bLen,pbData);
_exit();
}
}
else//密碼出錯
{
memcpy(pbData,"password is error",17);
_set_response(17,pbData);
_exit();
}
//參數(shù)不對,返回0x88
bRes = 0x88;
_set_response(1,&bRes);
_exit();
}
*/
|
|