ssdt函数索引号_获得SSDT函数名和索引号的代码

代码:

/*++

Module Name:

Entry.c

Abstract:

A sample with ListSSDT.c .

--*/

#include "ListSSDT.h"

//

//  function declaration

//

DRIVER_UNLOAD UnloadMe;

DRIVER_INITIALIZE DriverEntry;

#ifdef ALLOC_PRAGMA

#pragma alloc_text(INIT, DriverEntry)

#pragma alloc_text(PAGE, UnloadMe)

#endif

NTSTATUS

DriverEntry(

IN PDRIVER_OBJECT DriverObject,

IN PUNICODE_STRING RegistryPath)

/*++

Routine Description:

Entry of driver.

Arguments:

DriverObject - Pointer to driver object created by system.

RegistryPath - Pointer to the Unicode name of the registry path

for this driver.

Return Value:

NT Status code

--*/

{

NTSTATUS Status;

ULONG NameLength;

ULONG AddrLength;

PVOID NameBuffer;

PVOID AddrBuffer;

PVOID AddrOrig;

ULONG i;

//

//

//Important Variables:

//

//  NameBuffer - Buffer to receive the function names of SSDT.

//  AddrBuffer - Buffer to receive the current function address of SSDT.

//  AddrOrig - Buffer to receive the original function address of SSDT.

//

//

UNREFERENCED_PARAMETER( RegistryPath );

//

//  driver initialization

//

DriverObject->DriverUnload = UnloadMe;

//

//  get the size of all information.

//

Status = GetNeedLength( &NameLength, &AddrLength);

if(!NT_SUCCESS(Status))

{

return Status;

}

//

//  allocate memory

//

NameBuffer = ExAllocatePoolWithTag(NonPagedPool, NameLength, 'name');

AddrBuffer = ExAllocatePoolWithTag(NonPagedPool, AddrLength, 'addr');

AddrOrig = ExAllocatePoolWithTag(NonPagedPool, AddrLength, 'orig');

if(NameBuffer == NULL)

{

return STATUS_UNSUCCESSFUL;

}

if(AddrBuffer == NULL)

{

ExFreePool(NameBuffer);

return STATUS_UNSUCCESSFUL;

}

if(AddrOrig == NULL)

{

ExFreePool(NameBuffer);

ExFreePool(AddrBuffer);

return STATUS_UNSUCCESSFUL;

}

//

//  get information

//

Status = GetSSDTInfo(NameBuffer, AddrBuffer, AddrOrig);

//

//  print result

//

if(NT_SUCCESS(Status))

{

for( i = 0; i 

{

DbgPrint("%3d\t\t%s\t\t\t0x%08x\t0x%08x\n",

i,

(ULONG)NameBuffer + i * 0x32,

*(PULONG)((ULONG)AddrOrig + i * 0x04),

*(PULONG)((ULONG)AddrBuffer + i * 0x04));

}

}

//

//  free memory

//

if(NameBuffer != NULL)

{

ExFreePool(NameBuffer);

NameBuffer = NULL;

}

if(AddrBuffer != NULL)

{

ExFreePool(AddrBuffer);

AddrBuffer = NULL;

}

if(AddrOrig != NULL)

{

ExFreePool(AddrOrig);

AddrBuffer = NULL;

}

return Status;

}

VOID

UnloadMe(

IN PDRIVER_OBJECT DriverObject)

{

UNREFERENCED_PARAMETER( DriverObject );

//

//  nothing to do

//

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值