|
本帖最后由 gfw 于 2015-9-16 16:43 编辑
原版的代码比较啰嗦 于是抽空改写了份 现在看来舒爽多了 方便大家 不隐藏不卖B了 哈哈
- #pragma comment(lib,"advapi32.lib") //Finishing by GFW@vbasm.com
- SC_HANDLE InstallDriver(PCHAR m_pSysPath, PCHAR m_pServiceName)
- {
- PCHAR m_pDisplayName = m_pServiceName;
- SC_HANDLE m_hSCManager = OpenSCManagerA(NULL,NULL,SC_MANAGER_ALL_ACCESS);
- if (NULL == m_hSCManager)
- {
- return 0;
- }
- SC_HANDLE m_hService = CreateServiceA(m_hSCManager,
- m_pServiceName,
- m_pDisplayName,
- SERVICE_ALL_ACCESS,
- SERVICE_KERNEL_DRIVER,
- SERVICE_DEMAND_START,
- SERVICE_ERROR_NORMAL,
- m_pSysPath,
- NULL,NULL,NULL,NULL,NULL);
- if (NULL == m_hService)
- {
- if (ERROR_SERVICE_EXISTS == GetLastError())
- {
- m_hService = OpenServiceA(m_hSCManager,m_pServiceName,SERVICE_ALL_ACCESS);
- }
- }
- CloseServiceHandle(m_hSCManager);
- return m_hService;
- }
- BOOL StartDriver(SC_HANDLE m_hService)
- {
- return StartServiceA(m_hService,NULL,NULL);
- }
- BOOL StopDriver(SC_HANDLE m_hService)
- {
- SERVICE_STATUS ss = {0};
- return ControlService(m_hService,SERVICE_CONTROL_STOP,&ss);
- }
- BOOL RemoveDriver(SC_HANDLE m_hService)
- {
- return DeleteService(m_hService);
- }
- HANDLE OpenDriver(PCHAR pLinkName)/* \\\\.\\test */
- {
- HANDLE m_hDriver = CreateFileA(pLinkName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
- if(m_hDriver != INVALID_HANDLE_VALUE)
- return m_hDriver;
- else
- return 0;
- }
- BOOL CloseDriver(HANDLE m_hDriver)
- {
- __try
- {
- return CloseHandle(m_hDriver);
- }
- __except(1)
- {
- return 0;
- }
- }
- _inline DWORD CTL_CODE_GEN(DWORD lngFunction)
- {
- return (FILE_DEVICE_UNKNOWN * 65536) | (FILE_ANY_ACCESS * 16384) | (lngFunction * 4) | METHOD_BUFFERED;
- }
- BOOL ControlDriver(HANDLE m_hDriver, DWORD dwIoCode, PVOID InBuff, DWORD InBuffLen, PVOID OutBuff, DWORD OutBuffLen, DWORD *RealRetBytes)
- {
- DWORD dw=0;
- BOOL b=DeviceIoControl(m_hDriver,CTL_CODE_GEN(dwIoCode),InBuff,InBuffLen,OutBuff,OutBuffLen,&dw,NULL);
- if(RealRetBytes)
- {
- *RealRetBytes=dw;
- }
- return b;
- }
- void GetAppPath(char *szPathString)
- {
- GetModuleFileNameA(0,szPathString,MAX_PATH);
- for(SIZE_T i=strlen(szPathString)-1;i>=0;i--)
- {
- if(szPathString[i]=='\\')
- {
- szPathString[i+1]='\0';
- break;
- }
- }
- }
- SC_HANDLE GetServiceHandle(PCHAR m_pServiceName)
- {
- SC_HANDLE m_hSCManager = OpenSCManagerA(NULL,NULL,SC_MANAGER_ALL_ACCESS);
- if (NULL == m_hSCManager)
- {
- return 0;
- }
- SC_HANDLE m_hService = OpenServiceA(m_hSCManager,m_pServiceName,SERVICE_ALL_ACCESS);
- if (NULL == m_hService)
- {
- CloseServiceHandle(m_hSCManager);
- return 0;
- }
- CloseServiceHandle(m_hSCManager);
- return m_hService;
- }
复制代码
如何使用?- void test()
- {
- CHAR szDrvFile[MAX_PATH]={0};
- GetAppPath(szDrvFile);
- strcat(szDrvFile,"KrnlHW64.sys");
- SC_HANDLE hSc=InstallDriver(szDrvFile,"KrnlHW64");
- if(hSc)
- {
- StartDriver(hSc);
- HANDLE hDrv=OpenDriver("\\\\.\\KrnlHW64");
- ControlDriver(hDrv,0x800,0,0,0,0,0);
- CloseDriver(hDrv);
- StopDriver(hSc);
- RemoveDriver(hSc);
- }
- }
复制代码 |
评分
-
查看全部评分
|