驱动获取自身路径示例代码

驱动获取自身路径,在某些情况下需要用到。。。

 NTSTATUS DriverEntry(
  IN OUT PDRIVER_OBJECT   DriverObject,
  IN PUNICODE_STRING      RegistryPath
  )
 {

OBJECT_ATTRIBUTES  objectAttributes;
  UNICODE_STRING RegUnicodeKeyName;
  HANDLE hRegister;
  CHAR KeyFullInfo[MAX_PATH];
  ULONG ulSize;
  ANSI_STRING AnsiDriverPath;
  UNICODE_STRING UniDriverPath;
  PKEY_VALUE_FULL_INFORMATION pKeyFullInfo;
  PCHAR pos;

  PDEVICE_OBJECT pdoDeviceObj = 0;
  NTSTATUS status = STATUS_UNSUCCESSFUL;
  pdoGlobalDrvObj = DriverObject;

...

RtlInitUnicodeString( &RegUnicodeKeyName,L"ImagePath");
  InitializeObjectAttributes(&objectAttributes,RegistryPath, OBJ_CASE_INSENSITIVE,NULL,NULL );
  status = ZwOpenKey( &hRegister,GENERIC_READ,&objectAttributes);
  if (NT_SUCCESS(status))
  {
   //KdPrint(("[RegTest] ZwOpenKey %wZ Success!", ustrRegString));
   status = ZwQueryValueKey(hRegister, &RegUnicodeKeyName, KeyValueFullInformation, KeyFullInfo,MAX_PATH,&ulSize);

   if (NT_SUCCESS(status))
   {
    KdPrint(("++++++++++ RegistryPath %ws\n", RegistryPath));


    pKeyFullInfo = (PKEY_VALUE_FULL_INFORMATION)KeyFullInfo;

    RtlInitUnicodeString(&UniDriverPath, (PCHAR)pKeyFullInfo+pKeyFullInfo->DataOffset);
    status = RtlUnicodeStringToAnsiString(&AnsiDriverPath,&UniDriverPath,TRUE);
    if ( NT_SUCCESS(status))
    {

     KdPrint(("++++++++++ Driver Path %s\n", AnsiDriverPath.Buffer));

     RtlCopyMemory(G_Dllname, AnsiDriverPath.Buffer+4, AnsiDriverPath.Length);// \??\C:\testdriver\testdriver.sys
   ...
    }

    RtlFreeAnsiString(&AnsiDriverPath);
    ZwClose(hRegister);
    return STATUS_SUCCESS;


   }


   ZwClose(hRegister);
  }
return STATUS_SUCCESS;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值