diff options
Diffstat (limited to '')
-rw-r--r-- | private/ntos/ndis/ndiswan/kdexts/api.c | 385 |
1 files changed, 385 insertions, 0 deletions
diff --git a/private/ntos/ndis/ndiswan/kdexts/api.c b/private/ntos/ndis/ndiswan/kdexts/api.c new file mode 100644 index 000000000..d46296696 --- /dev/null +++ b/private/ntos/ndis/ndiswan/kdexts/api.c @@ -0,0 +1,385 @@ +#include <wanhelp.h> + +DECLARE_API(ndiswancb) +{ + DWORD Address, BytesRead; + NDISWANCB NdisWanCB; + + Address = GetExpression("ndiswan!ndiswancb"); + + if (!ReadMemory(Address, &NdisWanCB, sizeof(NDISWANCB), &BytesRead)) { + return; + } + + if (BytesRead >= sizeof(NDISWANCB)) { + + DisplayNdisWanCB(Address, &NdisWanCB); + + } else { + dprintf("Only read %d bytes, expected %d bytes\n", BytesRead, sizeof(NdisWanCB)); + } + + return; +} + +DECLARE_API(enumwanadaptercb) +{ + DWORD Address, BytesRead; + WAN_GLOBAL_LIST AdapterList; + PWAN_GLOBAL_LIST Address1; + + Address = GetExpression("ndiswan!wanadaptercblist"); + Address1 = (PWAN_GLOBAL_LIST)Address; + + if (!ReadMemory(Address, &AdapterList, sizeof(WAN_GLOBAL_LIST), &BytesRead)) { + return; + } + + if (BytesRead >= sizeof(WAN_GLOBAL_LIST)) { + dprintf("WanAdapterCBList: 0x%8.8x\n",Address); + dprintf(" Lock: 0x%8.8x Irql: 0x%8.8x\n", + AdapterList.Lock.SpinLock, AdapterList.Lock.OldIrql); + dprintf(" Count: %ld MaxCount: %ld\n", + AdapterList.ulCount, AdapterList.ulMaxCount); + + Address = AdapterList.List.Flink; + + while ((PVOID)Address != (PVOID)&Address1->List) { + WAN_ADAPTERCB WanAdapterCB; + + if (ReadMemory(Address, &WanAdapterCB, sizeof(WAN_ADAPTERCB), &BytesRead)) { + DisplayWanAdapterCB(Address, &WanAdapterCB); + } + + Address = (DWORD)WanAdapterCB.Linkage.Flink; + } + + } else { + + dprintf("Only read %d bytes, expected %d bytes\n", BytesRead, sizeof(WAN_GLOBAL_LIST)); + } +} + +DECLARE_API(wanadaptercb) +{ + DWORD Address, BytesRead; + WAN_ADAPTERCB WanAdapterCB; + PUCHAR s = (PSTR)args; + BOOLEAN Verbose = FALSE; + + // + // Did they forget something... + // + if (0 == args[0]) + { +Usage: + dprintf("wanadapter <PWANADAPTERCB>\n"); + return; + } + + sscanf(args, "%lx", &Address); + + if (!ReadMemory(Address, &WanAdapterCB, sizeof(WAN_ADAPTERCB), &BytesRead)) { + return; + } + + if (BytesRead >= sizeof(WAN_ADAPTERCB)) { + + DisplayWanAdapterCB(Address, &WanAdapterCB); + + } else { + dprintf("Only read %d bytes, expected %d bytes\n", BytesRead, sizeof(WanAdapterCB)); + } +} + +DECLARE_API(enumadaptercb) +{ + DWORD Address, BytesRead; + WAN_GLOBAL_LIST AdapterList; + PWAN_GLOBAL_LIST Address1; + + + Address = GetExpression("ndiswan!adaptercblist"); + Address1 = (PWAN_GLOBAL_LIST)Address; + + if (!ReadMemory(Address, &AdapterList, sizeof(WAN_GLOBAL_LIST), &BytesRead)) { + return; + } + + if (BytesRead >= sizeof(WAN_GLOBAL_LIST)) { + + dprintf("AdapterCBList: 0x%8.8x\n",Address); + dprintf(" Lock: 0x%8.8x Irql: 0x%8.8x\n", + AdapterList.Lock.SpinLock, AdapterList.Lock.OldIrql); + dprintf(" Count: %ld MaxCount: %ld\n", + AdapterList.ulCount, AdapterList.ulMaxCount); + + Address = AdapterList.List.Flink; + + while ((PVOID)Address != (PVOID)&Address1->List) { + ADAPTERCB AdapterCB; + + if (ReadMemory(Address, &AdapterCB, sizeof(ADAPTERCB), &BytesRead)) { + DisplayAdapterCB(Address, &AdapterCB); + } + + Address = (DWORD)AdapterCB.Linkage.Flink; + } + } else { + + dprintf("Only read %d bytes, expected %d bytes\n", BytesRead, sizeof(WAN_GLOBAL_LIST)); + } +} + +DECLARE_API(adaptercb) +{ + DWORD Address, BytesRead; + ADAPTERCB AdapterCB; + PUCHAR s = (PSTR)args; + BOOLEAN Verbose = FALSE; + + // + // Did they forget something... + // + if (0 == args[0]) + { +Usage: + dprintf("adapter <PADAPTERCB>\n"); + return; + } + + sscanf(args, "%lx", &Address); + + if (!ReadMemory(Address, &AdapterCB, sizeof(ADAPTERCB), &BytesRead)) { + return; + } + + if (BytesRead >= sizeof(ADAPTERCB)) { + + DisplayAdapterCB(Address, &AdapterCB); + + } else { + dprintf("Only read %d bytes, expected %d bytes\n", BytesRead, sizeof(AdapterCB)); + } +} + +DECLARE_API(connectiontable) +{ + DWORD Address, Address1, BytesRead, i, j; + CONNECTION_TABLE ConnectionTable; + + Address = GetExpression("ndiswan!connectiontable"); + + if (!ReadMemory(Address, &Address1, sizeof(DWORD), &BytesRead)) { + return; + } + + if (!ReadMemory(Address1, &ConnectionTable, sizeof(CONNECTION_TABLE), &BytesRead)) { + return; + } + + if (BytesRead >= sizeof(CONNECTION_TABLE)) { + DisplayConnectionTable(Address, &ConnectionTable); + + for (i = 0, j = 0; j < ConnectionTable.ulNumActiveLinks; i++) { + LINKCB LinkCB; + + // + // Get pointer to location in Linktable + // + Address = ConnectionTable.LinkArray + i; + + if (!ReadMemory(Address, &Address1, sizeof(DWORD), &BytesRead)) { + continue; + } + + if (Address1 != NULL) { + + if (ReadMemory(Address1, &LinkCB, sizeof(LINKCB), &BytesRead)) { + DisplayLinkCB(Address1, &LinkCB); + j++; + } + + } + + } + + for (i = 0, j = 0; j < ConnectionTable.ulNumActiveBundles; i++) { + BUNDLECB BundleCB; + + // + // Get pointer to location in bundletable + // + Address = ConnectionTable.BundleArray + i; + + + if (!ReadMemory(Address, &Address1, sizeof(DWORD), &BytesRead)) { + continue; + } + + if (Address1 != NULL) { + + if (ReadMemory(Address1, &BundleCB, sizeof(BUNDLECB), &BytesRead)) { + DisplayBundleCB(Address1, &BundleCB); + j++; + } + } + + } + + } else { + dprintf("Only read %d bytes, expected %d bytes\n", BytesRead, sizeof(CONNECTION_TABLE)); + } +} + +DECLARE_API(bundlecb) +{ + DWORD Address, BytesRead; + BUNDLECB BundleCB; + + // + // Did they forget something... + // + if (0 == args[0]) + { +Usage: + dprintf("bundlecb <PBUNDLECB>\n"); + return; + } + + sscanf(args, "%lx", &Address); + + if (!ReadMemory(Address, &BundleCB, sizeof(BUNDLECB), &BytesRead)) { + return; + } + + if (BytesRead >= sizeof(BUNDLECB)) { + + DisplayBundleCB(Address, &BundleCB); + + } else { + dprintf("Only read %d bytes, expected %d bytes\n", BytesRead, sizeof(BUNDLECB)); + } +} + +DECLARE_API(linkcb) +{ + DWORD Address, BytesRead; + LINKCB LinkCB; + + // + // Did they forget something... + // + if (0 == args[0]) + { +Usage: + dprintf("linkcb <PLINKCB>\n"); + return; + } + + sscanf(args, "%lx", &Address); + + if (!ReadMemory(Address, &LinkCB, sizeof(LINKCB), &BytesRead)) { + return; + } + + if (BytesRead >= sizeof(LINKCB)) { + + DisplayLinkCB(Address, &LinkCB); + + } else { + dprintf("Only read %d bytes, expected %d bytes\n", BytesRead, sizeof(LINKCB)); + } +} + +DECLARE_API(protocolcb) +{ + DWORD Address, BytesRead; + PROTOCOLCB ProtocolCB; + + // + // Did they forget something... + // + if (0 == args[0]) + { +Usage: + dprintf("protocolcb <PPROTOCOLCB>\n"); + return; + } + + sscanf(args, "%lx", &Address); + + if (!ReadMemory(Address, &ProtocolCB, sizeof(PROTOCOLCB), &BytesRead)) { + return; + } + + if (BytesRead >= sizeof(PROTOCOLCB)) { + + DisplayProtocolCB(Address, &ProtocolCB); + + } else { + dprintf("Only read %d bytes, expected %d bytes\n", BytesRead, sizeof(PROTOCOLCB)); + } +} + +DECLARE_API(wanpacket) +{ + DWORD Address, BytesRead; + NDIS_WAN_PACKET Packet; + + // + // Did they forget something... + // + if (0 == args[0]) + { +Usage: + dprintf("wanpacket <PNDIS_WAN_PACKET>\n"); + return; + } + + sscanf(args, "%lx", &Address); + + if (!ReadMemory(Address, &Packet, sizeof(NDIS_WAN_PACKET), &BytesRead)) { + return; + } + + if (BytesRead >= sizeof(NDIS_WAN_PACKET)) { + + DisplayWanPacket(Address, &Packet); + + } else { + dprintf("Only read %d bytes, expected %d bytes\n", BytesRead, sizeof(NDIS_WAN_PACKET)); + } +} + +DECLARE_API(ndispacket) +{ + DWORD Address, BytesRead; + NDIS_PACKET Packet; + + // + // Did they forget something... + // + if (0 == args[0]) + { +Usage: + dprintf("ndispacket <PNDIS_PACKET>\n"); + return; + } + + sscanf(args, "%lx", &Address); + + if (!ReadMemory(Address, &Packet, sizeof(NDIS_PACKET), &BytesRead)) { + return; + } + + if (BytesRead >= sizeof(NDIS_PACKET)) { + + DisplayNdisPacket(Address, &Packet); + + } else { + dprintf("Only read %d bytes, expected %d bytes\n", BytesRead, sizeof(NDIS_PACKET)); + } +} + + |