Для начала пишем тестовый драйвер, который устанавливает пару callout's (через FwpsCalloutRegister0).
Далее, просто перечисляем все теги памяти, ищем нужный(WFP callouts):
!poolused
...
WfpC 12 74384 0 0 WFP callouts , Binary: netio.sys
...
!poolfind
WfpC
fffffa801a148000 : tag WfpC, size 0x12000, Nonpaged pool
Затем выводим содержимое памяти:
dqs fffffa801a148000 L1000 (или dqs fffffa801a148000 L0x12000, но тут уже нужно логировать в log file)
kd> dqs fffffa801a148000 L1000
fffffa80`1a148000 00000000`00000000
fffffa80`1a148008 00000000`00000000
fffffa80`1a148010 00000000`00000000
fffffa80`1a148018 00000000`00000000
fffffa80`1a148020 00000000`00000000
fffffa80`1a148028 00000000`00000000
fffffa80`1a148030 00000000`00000000
fffffa80`1a148038 00000000`00000000
fffffa80`1a148040 00000000`00000000
fffffa80`1a148048 00000001`00000002
fffffa80`1a148050 00000000`00000000
fffffa80`1a148058 fffff880`01ebac40 tcpip!IPSecInboundTransportFilterCalloutClassifyV4
fffffa80`1a148060 fffff880`01dab624 tcpip!IPSecAleConnectCalloutNotify+0x2
fffffa80`1a148068 00000000`00000000
...
fffffa80`1a14c808 00000000`00000000
fffffa80`1a14c810 fffff880`05d0d700 mpsdrv!MpsQueryUserCallout
fffffa80`1a14c818 fffff880`05d0d8e0 mpsdrv!MpsDummyFilterNotify
fffffa80`1a14c820 00000000`00000000
...
fffffa80`1a14ce38 00000000`00000000
fffffa80`1a14ce40 fffff880`05dde19c Ndu!NduFlowEstablishedClassify
fffffa80`1a14ce48 fffff880`05dde810 Ndu!NduCalloutNotify
fffffa80`1a14ce50 00000000`00000000
...
fffffa80`1a14d078 00000000`00000000
fffffa80`1a14d080 fffff880`074d4000 test+0x1000 <== а вот и callout's тестового драйвера
fffffa80`1a14d088 fffff880`074d4500 test+0x1500
fffffa80`1a14d090 00000000`00000000
И не нужно мучатся, в дизасме выискивать смещения на эти структуры, как это делается в некоторых статьях.
Тем более, что на разных версиях ОС эти смещения указывают на совсем другое, и все эти описанные сакральные знания становятся бесполезными. А теги памяти с очень большой вероятностью меняться не будут.