返回顶部

Install a NT Driver

242014
Install a NT Driver

#include “windows.h”
#include “stdio.h”
#include “stdlib.h”
BOOL LoadDriver(SC_HANDLE schSCManager, //SCM Handle
LPCSTR lpszDriverName, //Driver Name
LPCSTR lpszServiceFullPath); //full-qualified path
BOOL RemoveDriver(SC_HANDLE schSCManager, //SCM handle
LPCTSTR lpszDriverName); //Driver Name
BOOL StartDriver(SC_HANDLE schSCManager,
LPCTSTR lpszDriverName);
BOOL StopService(SC_HANDLE schSCManager,
LPCTSTR lpszDriverName);

int main()
{
char szFilePath[MAX_PATH];
char* pszFileName;
OPENFILENAMEA stOpenFileName;
BOOL zRet;
SC_HANDLE schSCManager;
//
RtlZeroMemory(&stOpenFileName ,sizeof(OPENFILENAME));
RtlZeroMemory(szFilePath ,sizeof(char)*MAX_PATH);
stOpenFileName.lStructSize = sizeof(OPENFILENAME);;
stOpenFileName.lpstrFilter = “驱动(*.sys)\0\0″;
stOpenFileName.lpstrFile = szFilePath;
stOpenFileName.nMaxFile = MAX_PATH;
stOpenFileName.Flags = OFN_FILEMUSTEXIST;
zRet = GetOpenFileName(&stOpenFileName);
MessageBox(NULL, stOpenFileName.lpstrFile, stOpenFileName.lpstrFile+stOpenFileName.nFileOffset, 0);
//
pszFileName = stOpenFileName.lpstrFile + stOpenFileName.nFileOffset;
//
schSCManager = OpenSCManager(NULL,//Machine Name
NULL,//local database
SC_MANAGER_ALL_ACCESS);
//
if ( !schSCManager )
{
printf(“Open SCM Failed ERROR:%X\n”,GetLastError());
system(“pause”);
return -1;
}

//TODO: check the path
if ( LoadDriver(schSCManager, pszFileName, &szFilePath) )
{
printf(“Load Success!\n”);
}

system(“pause”);

if ( StartDriver(schSCManager, pszFileName) )
{
printf(“Start Success!\n”);
}

system(“pause”);
if ( StopService(schSCManager, pszFileName) )
{
printf(“Stop Success!\n”);
}

system(“pause”);
if ( RemoveDriver(schSCManager, pszFileName) )
{
printf(“Remove Success!\n”);
}

system(“pause”);

CloseServiceHandle(schSCManager);

return 0;
}

BOOL LoadDriver(SC_HANDLE schSCManager , //SCM Handle
LPCSTR lpszDriverName , //Driver Name
LPCSTR lpszServiceFullPath) //full-qualified path
{
SC_HANDLE schService = NULL;
DWORD dwErrorRet;

schService = CreateService(schSCManager ,
lpszDriverName , //Service name
lpszDriverName , //Service to display
SERVICE_ALL_ACCESS , //desired access
SERVICE_KERNEL_DRIVER , //service type
SERVICE_DEMAND_START , //start type
SERVICE_ERROR_IGNORE , //error control type
lpszServiceFullPath , //full-qualified path
NULL ,NULL ,NULL ,NULL ,NULL
);

if (!schService)
{
dwErrorRet = GetLastError();
if (dwErrorRet == ERROR_SERVICE_EXISTS)
{
printf(“Service Existed!\n”);
return TRUE;
}
else
{
printf(“CreateService failed ! Error:%X\n” ,dwErrorRet);
return FALSE;
}
}

//Create Successfully
//Close the service
printf(“Create Service Successful!”);
if (schService)
CloseServiceHandle(schService);
return TRUE;

}

//remove service
BOOL RemoveDriver(SC_HANDLE schSCManager ,//SCM handle
LPCTSTR lpszDriverName)//Driver Name
{
SC_HANDLE schService;
BOOL zRet;
//Open an Existing Service
schService = OpenService(schSCManager ,
lpszDriverName ,
SERVICE_ALL_ACCESS);

if (!schService)
{
printf(“Open Service Failed! ERROR:%X\n” ,GetLastError());
return FALSE;

}
//Delete Service
if (DeleteService(schService))
{
zRet = TRUE;
}
else
{
printf(“DeleteService Failed! ERROR:%X\n” ,GetLastError());
zRet = FALSE;
}
if (schService)
{
//printf(“DeleteService Successful!\n”);
CloseServiceHandle(schService);
}
return zRet;

}

//start service
BOOL StartDriver(SC_HANDLE schSCManager ,
LPCTSTR lpszDriverName)
{
SC_HANDLE schService;
DWORD dwErrorRet;

//Open Service
schService = OpenService(schSCManager ,
lpszDriverName ,
SERVICE_ALL_ACCESS);

if (!schService)
{
printf(“Open Service Failed! ERROR:%X\n” ,GetLastError());
return FALSE;

}
if (!StartService(schService ,0 ,NULL))
{
//failed
dwErrorRet = GetLastError();
if (dwErrorRet == ERROR_SERVICE_ALREADY_RUNNING) //service has been running
return TRUE;
else
{
printf(“StartSerivce Failed!ERROR:%X\n” ,dwErrorRet);
return FALSE;
}
}
if (schService)
CloseServiceHandle(schService);
return TRUE;

}

//stop service
BOOL StopService(SC_HANDLE schSCManager ,
LPCTSTR lpszDriverName)
{
SC_HANDLE schService;
SERVICE_STATUS stServiceStatus;
BOOL zRet;
//Open Service
schService = OpenService(schSCManager ,
lpszDriverName ,
SERVICE_ALL_ACCESS);

if (!schService)
{
printf(“Open Service Failed! ERROR:%X\n” ,GetLastError());
return FALSE;

}

if (ControlService(schService ,
SERVICE_CONTROL_STOP ,
&stServiceStatus))
{
zRet = TRUE;
}
else
{
//Failed
printf(“StopService Failed ! ERROR:%X\n” ,GetLastError());
zRet = FALSE;
}
if (schService)
CloseServiceHandle(schService);

return zRet;
}

需要使用管理员权限运行

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 
Free Web Hosting