天天看點

通過驅動名字擷取驅動基址和大小

//
// 名稱: 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;
}