//
// 名稱: GetDriverBaseInfo
// 說明: 根據驅動名稱擷取驅動對象資訊: 驅動基址,驅動的大小
// 備注:
// email: [email protected]
//
BOOLEAN GetDriverBaseInfo( IN PWCHAR pszName, OUT DWORD* pnBasePtr, OUT DWORD* pnSize )
{
UNICODE_STRING uniName;
RtlInitUnicodeString( &uniName, pszName );
PFILE_OBJECT pFileObject;
PDEVICE_OBJECT pDeviceObject;
// 擷取裝置指針
NTSTATUS status = IoGetDeviceObjectPointer( &uniName, FILE_READ_DATA, &pFileObject, &pDeviceObject );
if ( !NT_SUCCESS(status) )
return FALSE;
PDRIVER_OBJECT pDriverObj = pDeviceObject->DriverObject;
// 傳回裝置基址和裝置大小
*pnBasePtr = (ULONG)pDriverObj->DriverStart;
*pnSize = pDriverObj->DriverSize;
ObDereferenceObject( pFileObject );
return TRUE;
}