现在很多的EXE文件都是自带驱动,在程序运行时直接将驱动文件释放出来并加载运行,下面给出一个释放驱动资源的示例函数,今天看到了这样的代码记录下来方便日后拿来使用。使用时只需要修改红色字体部分,改成自己的即可,这里说的是EXE、DLL等文件都可以采用这样的方式来释放。
//释放资源
BOOL Release(){
//查找资源文件
HRSRC res = FindResource(NULL,MAKEINTRESOURCE(IDR_SYS),TEXT("BINARY")); //实际使用时修改这里即可MAKEINTRESOURCE(IDR_SYS),TEXT("BINARY")
if(!res)
return FALSE;
//加载资源
HGLOBAL resGlobal = LoadResource(NULL,res);
if(!resGlobal)
return FALSE;
//资源文件大小
DWORD size=SizeofResource(NULL,res);
//锁定资源
BYTE* ptr=(BYTE*)LockResource(resGlobal);
if(!ptr)
return FALSE;
//创建文件 实际使用时修改XXX.sys
HANDLE hFile=CreateFile(TEXT("XXX.sys"), GENERIC_WRITE,
0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile==INVALID_HANDLE_VALUE)
return FALSE;
DWORD dw;
//将资数据写入文件
if(!WriteFile(hFile,ptr,size,&dw,NULL)){
CloseHandle(hFile);
return FALSE;
}
CloseHandle(hFile);
return TRUE;
}
//释放资源
BOOL Release(){
//查找资源文件
HRSRC res = FindResource(NULL,MAKEINTRESOURCE(IDR_SYS),TEXT("BINARY")); //实际使用时修改这里即可MAKEINTRESOURCE(IDR_SYS),TEXT("BINARY")
if(!res)
return FALSE;
//加载资源
HGLOBAL resGlobal = LoadResource(NULL,res);
if(!resGlobal)
return FALSE;
//资源文件大小
DWORD size=SizeofResource(NULL,res);
//锁定资源
BYTE* ptr=(BYTE*)LockResource(resGlobal);
if(!ptr)
return FALSE;
//创建文件 实际使用时修改XXX.sys
HANDLE hFile=CreateFile(TEXT("XXX.sys"), GENERIC_WRITE,
0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile==INVALID_HANDLE_VALUE)
return FALSE;
DWORD dw;
//将资数据写入文件
if(!WriteFile(hFile,ptr,size,&dw,NULL)){
CloseHandle(hFile);
return FALSE;
}
CloseHandle(hFile);
return TRUE;
}