Save some valuable lessons learned on Windows internals
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
parent
da3caadf48
commit
9514ef37b3
@ -29,5 +29,6 @@ typedef struct _SYSTEM_HANDLE_INFORMATION_EX
|
|||||||
} SYSTEM_HANDLE_INFORMATION_EX, *PSYSTEM_HANDLE_INFORMATION_EX;
|
} SYSTEM_HANDLE_INFORMATION_EX, *PSYSTEM_HANDLE_INFORMATION_EX;
|
||||||
|
|
||||||
extern NTSTATUS ZwQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, ULONG *ReturnLength);
|
extern NTSTATUS ZwQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, ULONG *ReturnLength);
|
||||||
|
extern NDIS_HANDLE NdisWdfGetAdapterContextFromAdapterHandle(PVOID DeviceExtension);
|
||||||
|
|
||||||
extern POBJECT_TYPE *IoDeviceObjectType;
|
extern POBJECT_TYPE *IoDeviceObjectType;
|
||||||
|
3
wintun.c
3
wintun.c
@ -66,6 +66,7 @@ typedef struct _TUN_CTX {
|
|||||||
* atomic and then releasing. It's similar to setting the atomic and then calling rcu_barrier(). */
|
* atomic and then releasing. It's similar to setting the atomic and then calling rcu_barrier(). */
|
||||||
EX_SPIN_LOCK TransitionLock;
|
EX_SPIN_LOCK TransitionLock;
|
||||||
|
|
||||||
|
/* This is actually a pointer to NDIS_MINIPORT_BLOCK struct. */
|
||||||
NDIS_HANDLE MiniportAdapterHandle;
|
NDIS_HANDLE MiniportAdapterHandle;
|
||||||
NDIS_STATISTICS_INFO Statistics;
|
NDIS_STATISTICS_INFO Statistics;
|
||||||
|
|
||||||
@ -1023,6 +1024,8 @@ static NDIS_STATUS TunInitializeEx(NDIS_HANDLE MiniportAdapterHandle, NDIS_HANDL
|
|||||||
goto cleanup_NdisDeregisterDeviceEx;
|
goto cleanup_NdisDeregisterDeviceEx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Jason reverse engineered and found NdisWdfGetAdapterContextFromAdapterHandle.
|
||||||
|
* Switch from device object's "Reserved" to this when we drop support for Windows 8.1. */
|
||||||
DEVICE_OBJECT *functional_device;
|
DEVICE_OBJECT *functional_device;
|
||||||
NdisMGetDeviceProperty(MiniportAdapterHandle, NULL, &functional_device, NULL, NULL, NULL);
|
NdisMGetDeviceProperty(MiniportAdapterHandle, NULL, &functional_device, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user