📄 setup.cpp
字号:
#include "stdafx.h"
#include "resource.h"
char dir[256];
SERVICE_STATUS stat;
BOOL CALLBACK DlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
// int i;
HANDLE hFile;
SC_HANDLE mun,dio;
BOOL rez;
switch (uMsg)
{
case WM_INITDIALOG:
{
hFile=CreateFile("\\\\.\\giveio",GENERIC_READ,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,0);
if(hFile==INVALID_HANDLE_VALUE){ // dio not found
SC_HANDLE man=OpenSCManager(NULL,NULL,GENERIC_READ);
if(man){
dio=OpenService(man,"dio",SERVICE_QUERY_STATUS);
if(dio){
QueryServiceStatus(dio,&stat);
if(stat.dwCurrentState==SERVICE_STOPPED){
EnableWindow(GetDlgItem(hDlg,IDC_START),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_REMOVE),TRUE);
}
else if(stat.dwCurrentState==SERVICE_RUNNING){
SetDlgItemText(hDlg,IDC_STATIC1,"Service is running, but inaccessible");
}
}
else {
SetDlgItemText(hDlg,IDC_STATIC1,"Service not found");
EnableWindow(GetDlgItem(hDlg,IDC_INSTALL),TRUE);
}
CloseServiceHandle(man);
}
else SetDlgItemText(hDlg,IDC_STATIC1,"Cannot connect to service database!");
}
else {
SetDlgItemText(hDlg,IDC_STATIC1,"Driver works fine");
EnableWindow(GetDlgItem(hDlg,IDC_STOP),TRUE);
}
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam)){
case IDCANCEL:
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
case IDC_START:
mun=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(mun){
dio=OpenService(mun,"dio",SERVICE_START);
if(dio){
rez=StartService(dio,0,NULL);
CloseServiceHandle(dio);
if(!rez){
CloseServiceHandle(mun);
SetDlgItemText(hDlg,IDC_STATIC1,"Error starting service");
return FALSE;
}
}
else{}
CloseServiceHandle(mun);
}
else{
SetDlgItemText(hDlg,IDC_STATIC1,"OpenSCManager error!");
return FALSE;
}
SetDlgItemText(hDlg,IDC_STATIC1,"Driver WORKS");
EnableWindow(GetDlgItem(hDlg,IDC_START),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_REMOVE),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_STOP),TRUE);
return TRUE;
case IDC_STOP:
mun=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(mun){
dio=OpenService(mun,"dio",SERVICE_STOP);
if(dio){
rez=ControlService(dio,SERVICE_CONTROL_STOP,&stat);
CloseServiceHandle(dio);
if(!rez) {
CloseServiceHandle(mun);
SetDlgItemText(hDlg,IDC_STATIC1,"Error stop service!");
return FALSE;
}
}
else {
SetDlgItemText(hDlg,IDC_STATIC1,"Error open service!");
CloseServiceHandle(mun);
return FALSE;
}
CloseServiceHandle(mun);
}
else{
SetDlgItemText(hDlg,IDC_STATIC1,"Cannot connect to service database!");
return FALSE;
}
SetDlgItemText(hDlg,IDC_STATIC1,"Driver STOPPED");
EnableWindow(GetDlgItem(hDlg,IDC_STOP),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_START),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_REMOVE),TRUE);
return TRUE;
case IDC_REMOVE:
mun=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
if(mun){
dio=OpenService(mun,"dio",DELETE);
if(dio){
rez=DeleteService(dio);
CloseServiceHandle(dio);
if(!rez) {
SetDlgItemText(hDlg,IDC_STATIC1,"Delete error!");
}
GetSystemDirectory(dir,256);
lstrcat(dir,"\\drivers\\giveio.sys");
DeleteFile(dir);
}
}
SetDlgItemText(hDlg,IDC_STATIC1,"Driver removed");
EnableWindow(GetDlgItem(hDlg,IDC_START),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_REMOVE),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_INSTALL),TRUE);
return TRUE;
case IDC_INSTALL:
HRSRC rs=FindResource(NULL,MAKEINTRESOURCE(IDR_RCDATA1),RT_RCDATA);
DWORD len=SizeofResource(NULL,rs);
HGLOBAL bm=LoadResource(NULL,rs);
GetSystemDirectory(dir,256);
lstrcat(dir,"\\drivers\\giveio.sys");
DeleteFile(dir);
HFILE hf=_lcreat(dir,0);
if(hf==HFILE_ERROR) {
wsprintf(dir,"Copy error #%d",GetLastError());
SetDlgItemText(hDlg,IDC_STATIC1,dir);
return FALSE;
}
_lwrite(hf,(LPCTSTR)bm,len);
_lclose(hf);
// 耦玟噱
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -