藉由更動TOC中變數來判斷是否要將系統回復為預設值
AP部分:將TOC中bReserved[3]的值設為0X45
TOC *p;
BYTE InBuf[2048];
DWORD psize,val=0;
if(::KernelIoControl(IOCTL_READ_TOC, NULL,0,&InBuf, 2048,&psize))
{
p = (TOC *)InBuf;
p->bReserved[3] =0x45;
::KernelIoControl(IOCTL_WRITE_TOC, &InBuf, 2048,NULL,0,&psize);
KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL); //reboot device
}
##CONTINUE##
Driver部分:
- 在IsAnyKeyDown()加入判斷:若值為0x45則將系統回復為預設值
if(toc->bReserved[3] == 0x45)
{
RETAILMSG(1, (TEXT("#####toc->bReserved[3]=%d \r\n"),toc->bReserved[3]));
return TRUE;
}
.........
- 在XXXDaemon中加入判斷:若值為0x45,則將PETestFolder刪除,並將值設為0避免重複作回復預設值的動作!
if(toc->bReserved[3] == 0x45)
{
if(::KernelIoControl(IOCTL_READ_TOC, NULL,0,&InBuf, 2048,&psize))
{
p = (TOC *)InBuf;
p->bReserved[3] =0;
::KernelIoControl(IOCTL_WRITE_TOC, &InBuf, 2048,NULL,0,&psize);
}
hFind = FindFirstFile (L"\\My Flash Disk\\PETestFolder", &FindFileData);
if(hFind != INVALID_HANDLE_VALUE)
{
FindClose(hFind);
if(EmptyDirectory(_T("\\My Flash Disk\\PETestFolder"),TRUE))
{
RemoveDirectory(_T("\\My Flash Disk\\PETestFolder"));
}
}
沒有留言:
張貼留言