Минипорты Ndis

Тема в разделе "WASM.NT.KERNEL", создана пользователем drem1lin, 2 сен 2010.

  1. drem1lin

    drem1lin Member

    Публикаций:
    0
    Регистрация:
    17 мар 2009
    Сообщения:
    300
    Пытаюсь узнать список минипортов, для этого регистрирую свой протокол, и строю свой итератор по протоколам, и пытаюсь достать имена минипортов соответствующих каждому протоколу, но получаю лог. Почему все имена либо пустые, либо вопросы?

    Код (Text):
    1. TestDriver: NdisRegisterProtocolDriver Complete 0x0
    2. TestDriver: ProtocolName: RSPNDR
    3. TestDriver: MiniportBlock->DeviceName: ????
    4. TestDriver: MiniportBlock==NULL
    5. TestDriver: MiniportBlock->DeviceName: ????
    6. TestDriver: MiniportBlock==NULL
    7. TestDriver: MiniportBlock->DeviceName: ????
    8. TestDriver: MiniportBlock==NULL
    9. TestDriver: OpenBlock==NULL
    10. TestDriver: ProtocolName: WANARPV6
    11. TestDriver: MiniportBlock->DeviceName:
    12. TestDriver: MiniportBlock==NULL
    13. TestDriver: OpenBlock==NULL
    14. TestDriver: ProtocolName: NDPROXY
    15. TestDriver: MiniportBlock->DeviceName:
    16. TestDriver: MiniportBlock==NULL
    17. TestDriver: MiniportBlock->DeviceName:
    18. TestDriver: MiniportBlock==NULL
    19. TestDriver: MiniportBlock->DeviceName: ????
    20. TestDriver: MiniportBlock==NULL
    21. TestDriver: OpenBlock==NULL
    22. TestDriver: ProtocolName: NDISWAN
    23. TestDriver: MiniportBlock->DeviceName: ????
    24. TestDriver: MiniportBlock==NULL
    25. TestDriver: OpenBlock==NULL
    26. TestDriver: ProtocolName: TCPIPTUNNEL
    27. TestDriver: OpenBlock==NULL
    28. TestDriver: ProtocolName: TCPIP
    29. TestDriver: MiniportBlock->DeviceName: ????
    30. TestDriver: MiniportBlock==NULL
    31. TestDriver: OpenBlock==NULL
    32. TestDriver: ProtocolChain == NULL 0x7
    33. TestDriver: NdisDeregisterProtocolDriver
    код моего драйвера. в чем может быть ошибка?
    Код (Text):
    1. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING  RegistryPath)
    2. {
    3.     UNICODE_STRING DeviceName,Win32Device;
    4.     PDEVICE_OBJECT DeviceObject = NULL;
    5.     NTSTATUS status;
    6.     unsigned i;
    7.     NDIS_PROTOCOL_DRIVER_CHARACTERISTICS    protocolChar;
    8.     NDIS_STRING protoName = NDIS_STRING_CONST("MyOwnProtokol");
    9.     NDIS_STATUS NdisStatus;
    10.     CHAR* ProtocolChain;
    11.     ULONG   offset;
    12.     ULONG   len;
    13.     NDIS_OPEN_BLOCK_VISTA_SP1*      OpenBlock;
    14.     PNDIS60_VISTA_SP1_ADAPTER_BLOCK     MiniportBlock;
    15.  
    16.  
    17.     IFDEBUG(DbgPrint("TestDriver: Loading...\n"));
    18.     NdisZeroMemory(&protocolChar,sizeof(NDIS_PROTOCOL_DRIVER_CHARACTERISTICS));
    19.  
    20.     protocolChar.Header.Type                = NDIS_OBJECT_TYPE_PROTOCOL_DRIVER_CHARACTERISTICS,
    21.     protocolChar.Header.Size                = sizeof(NDIS_PROTOCOL_DRIVER_CHARACTERISTICS);
    22.     protocolChar.Header.Revision            = NDIS_PROTOCOL_DRIVER_CHARACTERISTICS_REVISION_1;
    23.  
    24.     protocolChar.MajorNdisVersion            = 0x06;
    25.     protocolChar.MinorNdisVersion            = 0x00;
    26.     protocolChar.Name                        = protoName;
    27.     protocolChar.SetOptionsHandler           = MyProtocolSetOptions;
    28.     protocolChar.OpenAdapterCompleteHandlerEx  = MyNdisprotOpenAdapterComplete;
    29.     protocolChar.CloseAdapterCompleteHandlerEx = MyNdisprotCloseAdapterComplete;
    30.     protocolChar.SendNetBufferListsCompleteHandler = MyNdisprotSendComplete;
    31.     protocolChar.OidRequestCompleteHandler   = MyNdisprotRequestComplete;
    32.     protocolChar.StatusHandlerEx             = NULL;
    33.     protocolChar.UninstallHandler            = NULL;
    34.     protocolChar.ReceiveNetBufferListsHandler = MyNdisprotReceiveNetBufferLists;
    35.     protocolChar.NetPnPEventHandler          = ProtocolNetPnPEvent;
    36.     protocolChar.BindAdapterHandlerEx        = MyNdisprotBindAdapter;
    37.     protocolChar.UnbindAdapterHandlerEx      = MyNdisprotUnbindAdapter;
    38.  
    39.     __try
    40.     {
    41.         NdisStatus = NdisRegisterProtocolDriver(NULL,&protocolChar,&ourProtocolHandle);
    42.         if(NdisStatus!=NDIS_STATUS_SUCCESS)
    43.         {
    44.             IFDEBUG(DbgPrint("TestDriver: NdisRegisterProtocolDriver Uncomplete 0x%x\n",NdisStatus));
    45.             return STATUS_SUCCESS;
    46.         }
    47.     }
    48.     __except(EXCEPTION_EXECUTE_HANDLER)
    49.     {
    50.         IFDEBUG(DbgPrint("TestDriver: Exception raised in NdisRegisterProtocolDriver...\n"));
    51.     }
    52.     ProtocolChain = (CHAR*)ourProtocolHandle;
    53.     __try
    54.     {
    55.         if (ourProtocolHandle!=NULL)
    56.         {
    57.             NdisDeregisterProtocolDriver(ourProtocolHandle);
    58.             IFDEBUG(DbgPrint("TestDriver: NdisDeregisterProtocolDriver\n"));
    59.         }
    60.     }
    61.     __except(EXCEPTION_EXECUTE_HANDLER)
    62.     {
    63.         IFDEBUG(DbgPrint("TestDriver: Exception raised in NdisDeregisterProtocolDriver...\n"));
    64.     }
    65.  
    66.  
    67.     IFDEBUG(DbgPrint("TestDriver: NdisRegisterProtocolDriver Complete 0x%x\n",NdisStatus));
    68.     i=0;
    69.     __try
    70.     {
    71.         while(1)
    72.         {
    73.             i++;
    74.             offset = 0x08;
    75.             if (ProtocolChain == NULL) 
    76.             {
    77.                 IFDEBUG(DbgPrint("TestDriver: ProtocolChain == NULL 0x%x\n",i));
    78.                 break;
    79.             }
    80.             ProtocolChain = ((CHAR**)(ProtocolChain + offset))[0];
    81.             IFDEBUG(DbgPrint("TestDriver: ProtocolName: %ws\n",((NDIS_PROTOCOL_BLOCK_VISTA_SP1*)ProtocolChain)->Name.Buffer));
    82.             OpenBlock = ((NDIS_PROTOCOL_BLOCK_VISTA_SP1*)ProtocolChain)->OpenQueue;
    83.             while(1)
    84.             {
    85.                 if( OpenBlock == NULL )
    86.                 {
    87.                     IFDEBUG(DbgPrint("TestDriver: OpenBlock==NULL\n"));
    88.                     break;
    89.                 }
    90.                 MiniportBlock = (PNDIS60_VISTA_SP1_ADAPTER_BLOCK)(OpenBlock->MiniportHandle);
    91.                
    92.                 while(1)
    93.                 {
    94.                     if( MiniportBlock == NULL )
    95.                     {
    96.                         IFDEBUG(DbgPrint("TestDriver: MiniportBlock==NULL\n"));
    97.                         break;
    98.                     }
    99.                     IFDEBUG(DbgPrint("TestDriver: MiniportBlock->DeviceName: %ws\n", MiniportBlock->DeviceName.Buffer));
    100.                     MiniportBlock = (PNDIS60_VISTA_SP1_ADAPTER_BLOCK)(MiniportBlock->NextGlobalAdapter);
    101.                 }
    102.                 OpenBlock = OpenBlock->ProtocolNextOpen;
    103.             }
    104.             ProtocolChain = (CHAR*) (((NDIS_PROTOCOL_BLOCK_VISTA_SP1*)ProtocolChain)->NextProtocol);
    105.         }
    106.     }
    107.     __except(EXCEPTION_EXECUTE_HANDLER)
    108.     {
    109.         IFDEBUG(DbgPrint("TestDriver: Exception raised in Prot Iterator...\n"));
    110.     }
    111.    
    112.     RtlInitUnicodeString(&DeviceName,L"\\Device\\DriverTest");
    113.     RtlInitUnicodeString(&Win32Device,L"\\DosDevices\\DriverTest");
    114.  
    115.     for (i = 0; i <= IRP_MJ_MAXIMUM_FUNCTION; i++)
    116.         DriverObject->MajorFunction[i] = DriverTestDefaultHandler;
    117.  
    118.     DriverObject->MajorFunction[IRP_MJ_CREATE] = DriverTestCreateClose;
    119.     DriverObject->MajorFunction[IRP_MJ_CLOSE] = DriverTestCreateClose;
    120.     DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DeviceControlHandler;
    121.    
    122.     DriverObject->DriverUnload = DriverTestUnload;
    123.     status = IoCreateDevice(DriverObject,
    124.                             0,
    125.                             &DeviceName,
    126.                             FILE_DEVICE_UNKNOWN,
    127.                             0,
    128.                             FALSE,
    129.                             &DeviceObject);
    130.     if (!NT_SUCCESS(status))
    131.         return status;
    132.     if (!DeviceObject)
    133.         return STATUS_UNEXPECTED_IO_ERROR;
    134.  
    135.     DeviceObject->Flags |= DO_DIRECT_IO;
    136.     DeviceObject->AlignmentRequirement = FILE_WORD_ALIGNMENT;
    137.     status = IoCreateSymbolicLink(&Win32Device, &DeviceName);
    138.  
    139.     DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
    140.     return STATUS_SUCCESS;
    141. }