//
安装驱动的线程函数
UINT __cdecl CDriverProtectDlg::InstallDriverThread(LPVOID pParam)
{
CDriverProtectDlg* pDlg = NULL;
pDlg = (CDriverProtectDlg*)pParam;
pDlg->UpdateData(TRUE);
if
(pDlg->strPath.IsEmpty())
{
AfxMessageBox(L
"请选择驱动路径!"
);
return
0;
}
if
(pDlg->strrGamePath.IsEmpty())
{
AfxMessageBox(L
"请选择游戏路径!"
);
return
0;
}
if
(!pDlg->LoadNTDriver(L
"HelloDDK"
,pDlg->strPath.GetBuffer()))
{
pDlg->UnloadNTDriver(L
"HelloDDK"
);
pDlg->LoadNTDriver(L
"HelloDDK"
,pDlg->strPath.GetBuffer());
}
HANDLE hDevice =
::CreateFileW(L
"\\\\.\\HelloDDK"
,
GENERIC_READ | GENERIC_WRITE,
0,
//
share mode none
NULL,
//
no security
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );
//
no template
if
(hDevice == INVALID_HANDLE_VALUE)
{
pDlg->m_DriverINFORMATION.SetWindowTextW(L
"打开驱动错误!"
);
return
1;
}
DWORD Pid = pDlg->TransferProcessID(pDlg->strrGamePath.GetBuffer());
int a = (int)Pid;
UCHAR* InputBuffer = new UCHAR[a];
UCHAR* OutputBuffer= new UCHAR[a];
BOOL bRet;
DWORD dwOutput;
//
输入缓冲区作为输入,输出缓冲区作为输出
bRet = DeviceIoControl(hDevice, IOCTL_TEST1, InputBuffer, a, OutputBuffer, a, &dwOutput, NULL);
if
(bRet)
{
pDlg->m_DriverINFORMATION.SetWindowTextW(L
"开启保护成功!"
);
}
CloseHandle(hDevice);
delete []InputBuffer;
delete []OutputBuffer;
//AfxEndThread
(0);
ResumeThread(pDlg->ProcessMainThread);
pDlg = NULL;
return
0;
}
UINT __cdecl CDriverProtectDlg::UnInstallDriverThread(LPVOID pParam)
{
CDriverProtectDlg* pDlg = NULL;
pDlg = (CDriverProtectDlg*)pParam;
pDlg->UpdateData(TRUE);
if
(pDlg->strPath.IsEmpty())
{
AfxMessageBox(L
"请选择驱动路径!"
);
return
0;
}
if
(pDlg->strrGamePath.IsEmpty())
{
AfxMessageBox(L
"请选择游戏路径!"
);
return
0;
}
pDlg->UnloadNTDriver(L
"HelloDDK"
);
//AfxEndThread
(0);
pDlg = NULL;
return
0;
}