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