У меня есть базовый адрес NDIS и RVA до NdisMiniportList, что бы сделать пробежку по всем минипортам мне надо адрес NDIS с RVA преобразовать к типу NDIS_MINIPORT_BLOCK. Но код приведенный ниже не удается скомпилировать Код (Text): error C2037: left of 'SymbolicLinkName' specifies undefined struct/union '_NDIS_MINIPORT_BLOCK' и я не могу понять с чем это связано.. почему NDIS_MINIPORT_BLOCK и РNDIS_MINIPORT_BLOCK работают а _NDIS_MINIPORT_BLOCK пишет неопределен? и главное, я же к коде его не использую? точнее использую косвенно.. Залезал в NDIS.h, там над структурой _NDIS_MINIPORT_BLOCK стоит Код (Text): #if NDIS_LEGACY_MINIPORT я так понимаю это как то связано именно с ним.. Код (Text): PNDIS_MINIPORT_BLOCK* NDISmpBlock; hNDIS = GetModuleHandle("ndis.sys"); if(hNDIS==NULL) { DbgPrint("TestDriver: GetModuleHandle==NULL...\n"); return STATUS_SUCCESS; } DbgPrint("TestDriver: GetModuleHandle: 0x%x\n", hNDIS); NDISRVA = RVATOVA(hNDIS,NDISRVA); DbgPrint("TestDriver: NdisMiniportList: 0x%x\n",NDISRVA); __try { NDISmpBlock = (PNDIS_MINIPORT_BLOCK*)NDISRVA; DbgPrint("TestDriver: MiniPort SymbolicLinkName: %ws\n", NDISmpBlock->SymbolicLinkName); } __except(EXCEPTION_EXECUTE_HANDLER) { DbgPrint("TestDriver: Exception raised...\n"); }
Чтобы структура была определена нужно написать перед включением ndis.h #define NDIS_WRAPPER 1 Если вы посмотрите как определяется NDIS_LEGACY_MINIPORT Код (Text): #if ((defined(NDIS_MINIPORT_DRIVER) && (NDIS_MINIPORT_MAJOR_VERSION < 6)) || NDIS_WRAPPER) #define NDIS_LEGACY_MINIPORT 1 И еще нужно писать (*NDISmpBlock)->SymbolicLinkName.Buffer вместо NDISmpBlock->SymbolicLinkName