#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();
}
*/
|