C++ 如何使用NDIS支持NDIS630将NDIS 6.2移植到NDIS 6.3?

C++ 如何使用NDIS支持NDIS630将NDIS 6.2移植到NDIS 6.3?,c++,windows,driver,ndis,C++,Windows,Driver,Ndis,我有NDIS 6.2支持微型端口驱动程序。现在我想把NDIS 6.2移植到NDIS 6.3 使用此链接,我更改了NDIS 6.30中增强功能的一些一般要求和电源管理 我把所有的更改都放在同一个NDIS 6.2文件中 这些技术是(miniport.cpp) 。。。。等 然后在InitializeEx()函数中,NDIS\u MINIPORT\u ADAPTER\u REGISTRATION\u属性的更改如下: NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUT

我有NDIS 6.2支持微型端口驱动程序。现在我想把NDIS 6.2移植到NDIS 6.3

使用此链接,我更改了NDIS 6.30中增强功能的一些一般要求和电源管理

我把所有的更改都放在同一个NDIS 6.2文件中

这些技术是(miniport.cpp)

。。。。等

然后在InitializeEx()函数中,
NDIS\u MINIPORT\u ADAPTER\u REGISTRATION\u属性的更改如下:

NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES ndisMiniportAdapterRegistrationAttributes;
NdisZeroMemory(&ndisMiniportAdapterRegistrationAttributes, sizeof(NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES));

#if (NDIS_SUPPORT_NDIS630)

C_ASSERT(sizeof(NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES) >= NDIS_SIZEOF_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_2);
ndisMiniportAdapterRegistrationAttributes.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES;
ndisMiniportAdapterRegistrationAttributes.Header.Size = NDIS_SIZEOF_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_2;
ndisMiniportAdapterRegistrationAttributes.Header.Revision = NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_2;

#else

C_ASSERT(sizeof(NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES) >= NDIS_SIZEOF_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_1);
ndisMiniportAdapterRegistrationAttributes.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES;
ndisMiniportAdapterRegistrationAttributes.Header.Size = NDIS_SIZEOF_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_1;
ndisMiniportAdapterRegistrationAttributes.Header.Revision = NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_1;

#endif // NDIS MINIPORT VERSION

ndisMiniportAdapterRegistrationAttributes.MiniportAdapterContext = CMiniport::m_pMiniport;


#if (NDIS_SUPPORT_NDIS630)

    ndisMiniportAdapterRegistrationAttributes.AttributeFlags |= NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND;

#else

   ndisMiniportAdapterRegistrationAttributes.AttributeFlags = NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK | NDIS_MINIPORT_ATTRIBUTES_NDIS_WDM;

#endif  

ndisMiniportAdapterRegistrationAttributes.CheckForHangTimeInSeconds = 5;
对于chnage NDIS_PM_功能,我这样写道:

 NDIS_PM_CAPABILITIES ndisPmCapabilities;
 NdisZeroMemory(&ndisPmCapabilities, sizeof(NDIS_PM_CAPABILITIES));


#if (NDIS_SUPPORT_NDIS630)

    C_ASSERT(sizeof(NDIS_PM_CAPABILITIES) >= NDIS_SIZEOF_NDIS_PM_CAPABILITIES_REVISION_2);
    ndisPmCapabilities.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
    ndisPmCapabilities.Header.Size = NDIS_SIZEOF_NDIS_PM_CAPABILITIES_REVISION_2;
    ndisPmCapabilities.Header.Revision = NDIS_PM_CAPABILITIES_REVISION_2;

    ndisPmCapabilities.MinMagicPacketWakeUp = NdisDeviceStateUnspecified;
    ndisPmCapabilities.MinPatternWakeUp = NdisDeviceStateUnspecified;
    ndisPmCapabilities.MinLinkChangeWakeUp = NdisDeviceStateUnspecified;

#else

    C_ASSERT(sizeof(NDIS_PM_CAPABILITIES) >= NDIS_SIZEOF_NDIS_PM_CAPABILITIES_REVISION_1);
    ndisPmCapabilities.Header.Type = NDIS_OBJECT_TYPE_DEFAULT;
    ndisPmCapabilities.Header.Size = NDIS_SIZEOF_NDIS_PM_CAPABILITIES_REVISION_1;
    ndisPmCapabilities.Header.Revision = NDIS_PM_CAPABILITIES_REVISION_1;

    ndisPmCapabilities.MinMagicPacketWakeUp = NdisDeviceStateUnspecified;
    ndisPmCapabilities.MinPatternWakeUp = NdisDeviceStateUnspecified;
    ndisPmCapabilities.MinLinkChangeWakeUp = NdisDeviceStateUnspecified;

#endif // NDIS MINIPORT VERSION
因此,我的疑问是:

  • 我可以将此NDIS 6.30用于windows 7 NDIS 6.2吗
  • 如何激活
    NDIS\u支持\u NDIS630
    在ndis.h WDK文件中,宏如下所示:

    #if !defined(NDIS_SUPPORT_NDIS630)
    #if  (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
           (defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 30))) || \
          (defined (NDIS630)) || NDIS_WRAPPER)
    #define NDIS_SUPPORT_NDIS630      1
    #else
    #define NDIS_SUPPORT_NDIS630      0
    #endif
    #endif // !defined(NDIS_SUPPORT_NDIS630)
    
    但是当我使用
    ndisPmCapabilities.Header.Revision=NDIS\u PM\u CAPABILITIES\u Revision\u 2我直接得到的错误如下
    
    NDIS\u PM\u功能\u修订版\u 2未定义


    如何使用此
    NDIS\u支持\u NDIS630

    通过在项目中定义适当的
    NDIS6XX_微型端口
    来激活相关的
    NDIS
    版本。您可以在
    ndis.h
    标题开头的注释中看到更多详细信息


    您可以使用所需的任何
    NDIS
    版本编译驱动程序,但它们不是向后兼容的-每个Windows版本都提供了不同的
    NDIS
    版本,当然较旧的
    OS
    版本不能与较新的
    NDIS
    版本一起工作。

    Windows 7不支持NDIS 6.30。Windows 7只能升级到6.20。

    在.vcxproj文件内将NDIS620_MINIPORT=1更改为NDIS630_MINIPORT=1后,它才能工作。所以问题出在构建ommands中。感谢您提供的信息。所以我应该针对不同的操作系统构建我的应用程序?像NDIS 6.2-windows 7和NDIS 6.3-windows 8,8.1这样?我不知道你想实现什么。如果指定NDIS 630_微型端口,则代码应符合NDIS 6.3规范(与NDIS 6.2相比有一些差异,尤其是在注册过程中)。但由于不支持NDIS 6.3,因此生成的驱动程序不会安装在Windows 7上。你可以将你的驱动程序定位到NDIS 6.2,它应该可以在Windows 7和8上运行。但是当我使用NDIS 6.2时,我在Windows 8和8.1上遇到了一些崩溃。转储文件指出“ntoskrnl.exe”。我认为这是由于电源管理pblm。这就是我移植到NDIS 6.3的原因。那么这对我有帮助吗?有什么想法吗?没有实际的调试就很难说。那么,我可以为Windows 8和更高版本的操作系统使用NDIS 6.3驱动程序吗?是的,Windows 8支持NDIS 6.30ok。但我在Windows8中使用NDIS 6.2驱动程序时遇到了蓝屏问题。分析转储后,它指向ntoskrnl.exe。我想这是因为电源管理问题。所以我更新到NDIS 6.3。
    #if !defined(NDIS_SUPPORT_NDIS630)
    #if  (((defined (NDIS_MINIPORT_MAJOR_VERSION) && (NDIS_MINIPORT_MAJOR_VERSION >= 6)) && \
           (defined (NDIS_MINIPORT_MINOR_VERSION) && (NDIS_MINIPORT_MINOR_VERSION >= 30))) || \
          (defined (NDIS630)) || NDIS_WRAPPER)
    #define NDIS_SUPPORT_NDIS630      1
    #else
    #define NDIS_SUPPORT_NDIS630      0
    #endif
    #endif // !defined(NDIS_SUPPORT_NDIS630)