NT式駆動の取り付け
11580 ワード
NT式駆動の取り付け
A、OpenSCManager
B、CreateService
C、OpenService
D、StartService
E、CloseServiceHandle
F、loadNTDriver関数に統合
#include
通常のロードドライバの手順は次のとおりです.
1、OpenSCManagerを呼び出し、SCMマネージャを開きます.NULLを返すと、失敗を返します.そうしないと、次のステップに進みます.
2、CreateService作成サービスを呼び出し、GetLastErrorで取得した戻り値がERROR_である場合IO_PENDINGは、サービスが作成されたことを示す、OpenServiceでこのサービスを開く.
3、StartServiceオープンサービスを呼び出す
loadNTDriver関数への統合
A、OpenSCManager
B、CreateService
C、OpenService
D、StartService
E、CloseServiceHandle
F、loadNTDriver関数に統合
#include
通常のロードドライバの手順は次のとおりです.
1、OpenSCManagerを呼び出し、SCMマネージャを開きます.NULLを返すと、失敗を返します.そうしないと、次のステップに進みます.
2、CreateService作成サービスを呼び出し、GetLastErrorで取得した戻り値がERROR_である場合IO_PENDINGは、サービスが作成されたことを示す、OpenServiceでこのサービスを開く.
3、StartServiceオープンサービスを呼び出す
SC_HANDLE OpenSCManager(
LPCTSTR lpMachineName, // , NULL
LPCTSTR lpDatabaseName, // SCM , NULL
DWORD dwDesiredAccess // SC_MANAGER_ALL_ACCESS
);
BOOL CloseServiceHandle(
SC_HANDLE hSCObject // SCM
);
//
hServiceMgr = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
//
hServiceDDK = CreateService( hServiceMgr,//SCM
lpszDriverName, //
lpszDriverName, // DisplayName
SERVICE_ALL_ACCESS, //
SERVICE_KERNEL_DRIVER,//
SERVICE_DEMAND_START, // Start
SERVICE_ERROR_IGNORE, // ErrorControl
szDriverImagePath, // ImagePath
NULL, //
NULL, //
NULL, //
NULL, //
NULL); //
// ,
hServiceDDK = OpenService( hServiceMgr, lpszDriverName, SERVICE_ALL_ACCESS );
//
bRet= StartService( hServiceDDK, NULL, NULL );
loadNTDriver関数への統合
// NT
BOOL LoadNTDriver(char* lpDriverName,char* lpDriverPathName)
{
BOOL bRet = FALSE;
SC_HANDLE hServiceMgr=NULL;//SCM
SC_HANDLE hServiceDDK=NULL;//NT
//
hServiceMgr = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if( hServiceMgr == NULL )
{
//OpenSCManager
TRACE( "OpenSCManager() Faild %d !
", GetLastError() );
bRet = FALSE;
goto BExit;
}
else
{
//OpenSCManager
TRACE( "OpenSCManager() ok !
" );
}
//
hServiceDDK = CreateService( hServiceMgr,
lpDriverName, //
lpDriverName, // DisplayName
SERVICE_ALL_ACCESS, //
SERVICE_KERNEL_DRIVER,//
SERVICE_DEMAND_START, // Start
SERVICE_ERROR_IGNORE, // ErrorControl
lpDriverPathName, // ImagePath
NULL,
NULL,
NULL,
NULL,
NULL);
DWORD dwRtn;
//
if( hServiceDDK == NULL )
{
dwRtn = GetLastError();
if( dwRtn != ERROR_IO_PENDING && dwRtn != ERROR_SERVICE_EXISTS )
{
//
TRACE( "CrateService() %d !
", dwRtn );
bRet = FALSE;
goto BExit;
}
else
{
// ,
TRACE( "CrateService() , ERROR is ERROR_IO_PENDING or ERROR_SERVICE_EXISTS!
" );
}
// ,
hServiceDDK = OpenService( hServiceMgr, lpDriverName, SERVICE_ALL_ACCESS );
if( hServiceDDK == NULL )
{
// ,
dwRtn = GetLastError();
TRACE( "OpenService() %d !
", dwRtn );
bRet = FALSE;
goto BExit;
}
else
{
TRACE( "OpenService() !
" );
}
}
else
{
TRACE( "CrateService() !
" );
}
//
bRet= StartService( hServiceDDK, NULL, NULL );
if( !bRet ) //
{
TRACE( "StartService() %d !
", dwRtn );
}
bRet = TRUE;
//
BExit:
if(hServiceDDK)
{
CloseServiceHandle(hServiceDDK);
}
if(hServiceMgr)
{
CloseServiceHandle(hServiceMgr);
}
return bRet;
}