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

来源:互联网 发布:王家卫风格的话知乎 编辑:程序博客网 时间:2024/06/07 02:01

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

 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;}

0 0
原创粉丝点击