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

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

 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
    评论
NDIS(网络设备接口规范)是一种Microsoft Windows操作系统中的网络驱动程序模型。NDIS 网卡驱动程序用于管理计算机上的网络接口卡(NIC),负责将数据包从计算机发送到网络,以及将数据包从网络接收到计算机。下面是一个简单的示例代码,演示了如何在NDIS 网卡驱动程序中收发数据包。 首先,需要引入NDIS驱动的头文件和库文件。接着,定义一个NDIS驱动的设备对象,并初始化该对象。然后,创建一个NDIS包接收处理函数,用于接收和处理从网络接口卡接收到的数据包。在该函数中,可以使用NDIS提供的函数来获取和处理接收到的数据包。 示例代码如下所示: ```cpp #include <ndis.h> NDIS_HANDLE g_NdisDeviceHandle; NTSTATUS DriverEntry( _In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath ) { // 初始化NDIS驱动设备对象 NDIS_MINIPORT_CHARACTERISTICS npChars = { 0 }; npChars.MajorNdisVersion = NDIS_MAJOR_VERSION; npChars.MinorNdisVersion = NDIS_MINOR_VERSION; // 设置NDIS回调函数 // ... // 创建NDIS设备对象 NdisMInitializeWrapper( &g_NdisDeviceHandle, DriverObject, RegistryPath, NULL ); // 注册NDIS设备对象 // ... return STATUS_SUCCESS; } NDIS_STATUS NdisReceivePacket( NDIS_HANDLE NdisMiniportHandle, PNDIS_PACKET Packet ) { // 处理接收到的数据包 // 获取数据包的数据 PVOID dataBuffer = NULL; UINT dataLength = 0; NdisQueryPacket( Packet, NULL, NULL, &dataBuffer, &dataLength ); // 处理数据包 // ... return NDIS_STATUS_SUCCESS; } ``` 以上是一个简单的示例,展示了如何在NDIS网卡驱动程序中收发数据包的基本流程。根据实际需求,可以在此基础上进行修改和扩展。请注意,此示例仅为了说明目的,并非可编译代码。在实际应用中,需要根据具体系统和驱动程序的要求进行相应的实现和调试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值