--- /dev/null
+--- w32api-5.0.2/include/winbase.h.orig 2017-11-09 02:35:48.000000000 +0100
++++ w32api-5.0.2/include/winbase.h 2018-09-16 12:54:28.225409121 +0200
+@@ -270,6 +270,7 @@
+ #define FILE_FLAG_DELETE_ON_CLOSE 67108864
+ #define FILE_FLAG_BACKUP_SEMANTICS 33554432
+ #define FILE_FLAG_POSIX_SEMANTICS 16777216
++#define FILE_FLAG_SESSION_AWARE 0x800000
+ #define FILE_FLAG_OPEN_REPARSE_POINT 2097152
+ #define FILE_FLAG_OPEN_NO_RECALL 1048576
+
+@@ -453,6 +453,10 @@
+ #define DONT_RESOLVE_DLL_REFERENCES 1
+ #define LOAD_LIBRARY_AS_DATAFILE 2
+ #define LOAD_WITH_ALTERED_SEARCH_PATH 8
++#define LOAD_IGNORE_CODE_AUTHZ_LEVEL 0x10
++#define LOAD_LIBRARY_AS_IMAGE_RESOURCE 0x20
++#define LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE 0x40
++#define LOAD_LIBRARY_REQUIRE_SIGNED_TARGET 0x80
+
+ #define LMEM_FIXED 0
+ #define LMEM_MOVEABLE 2
+@@ -486,6 +487,8 @@
+ #define MOVEFILE_COPY_ALLOWED 2
+ #define MOVEFILE_DELAY_UNTIL_REBOOT 4
+ #define MOVEFILE_WRITE_THROUGH 8
++#define MOVEFILE_CREATE_HARDLINK 0x10
++#define MOVEFILE_FAIL_IF_NOT_TRACKABLE 0x20
+
+ #define MAXIMUM_WAIT_OBJECTS 64
+ #define MAXIMUM_SUSPEND_COUNT 0x7F
+@@ -598,11 +601,13 @@
+ #define BACKUP_OBJECT_ID 7
+ #define BACKUP_REPARSE_DATA 8
+ #define BACKUP_SPARSE_BLOCK 9
++#define BACKUP_TXFS_DATA 10
+
+ #define STREAM_NORMAL_ATTRIBUTE 0
+ #define STREAM_MODIFIED_WHEN_READ 1
+ #define STREAM_CONTAINS_SECURITY 2
+ #define STREAM_CONTAINS_PROPERTIES 4
++#define STREAM_SPARSE_ATTRIBUTE 8
+
+ #define STARTF_USESHOWWINDOW 1
+ #define STARTF_USESIZE 2
+@@ -614,6 +619,9 @@
+ #define STARTF_FORCEOFFFEEDBACK 128
+ #define STARTF_USESTDHANDLES 256
+ #define STARTF_USEHOTKEY 512
++#define STARTF_TITLEISLINKNAME 0x000800
++#define STARTF_TITLEISAPPID 0x001000
++#define STARTF_PREVENTPINNING 0x002000
+
+ #define TC_NORMAL 0
+ #define TC_HARDERR 1
+@@ -637,6 +645,8 @@
+ #define DDD_RAW_TARGET_PATH 1
+ #define DDD_REMOVE_DEFINITION 2
+ #define DDD_EXACT_MATCH_ON_REMOVE 4
++#define DDD_NO_BROADCAST_SYSTEM 8
++#define DDD_LUID_BROADCAST_DRIVE 0x10
+
+ #define HINSTANCE_ERROR 32
+
+@@ -698,6 +708,8 @@
+ #define REPLACEFILE_WRITE_THROUGH 0x00000001
+ #define REPLACEFILE_IGNORE_MERGE_ERRORS 0x00000002
+
++#define EVENTLOG_FULL_INFO 0
++
+ #if (_WIN32_WINNT > 0x0501)
+ /* FIXME: Once again, what does this mean? Should use >= comparator, for
+ * clarity. 0x0501 is WinXP, but does > WinXP mean Server-2003 (0x0502)?
+@@ -723,6 +735,7 @@
+ #define QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX 0x00000004
+ #define QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE 0x00000008
+ #define QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS 0x00000010
++#define QUERY_ACTCTX_FLAG_NO_ADDREF 0x80000000
+
+ #if _WIN32_WINNT >= _WIN32_WINNT_VISTA
+ /* Constants associated with features supported only on Vista and later.
+@@ -742,12 +755,85 @@
+ #define VOLUME_NAME_NONE 0x4
+ #define VOLUME_NAME_NT 0x2
+
++#define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x1
++#define FILE_SKIP_SET_EVENT_ON_HANDLE 0x2
++
++#define PROCESS_NAME_NATIVE 0x1
++
++#define PROC_THREAD_ATTRIBUTE_NUMBER 0x00ffff
++#define PROC_THREAD_ATTRIBUTE_THREAD 0x010000
++#define PROC_THREAD_ATTRIBUTE_INPUT 0x020000
++#define PROC_THREAD_ATTRIBUTE_ADDITIVE 0x040000
++
++#define ATOM_FLAG_GLOBAL 0x2
++
++#define LOGON32_PROVIDER_VIRTUAL 4
++
++#define RESTART_MAX_CMD_LINE 1024
++
++#define RESTART_NO_CRASH 1
++#define RESTART_NO_HANG 2
++#define RESTART_NO_PATCH 4
++#define RESTART_NO_REBOOT 8
++
++#define RECOVERY_DEFAULT_PING_INTERVAL 5000
++#define RECOVERY_MAX_PING_INTERVAL (5 *60 *1000)
++
+ #if _WIN32_WINNT >= _WIN32_WINNT_WIN7
+ /* Constants associated with features supported only on Win7 and later.
+ */
+ #define PROCESS_DEP_ENABLE 1
+ #define PROCESS_DEP_DISABLE_ATL_THUNK_EMULATION 2
+
++#define BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE 0x1
++#define BASE_SEARCH_PATH_PERMANENT 0x8000
++#define BASE_SEARCH_PATH_DISABLE_SAFE_SEARCHMODE 0x10000
++#define BASE_SEARCH_PATH_INVALID_FLAGS ~0x18001
++
++#define REMOTE_PROTOCOL_INFO_FLAG_LOOPBACK 0x00000001
++#define REMOTE_PROTOCOL_INFO_FLAG_OFFLINE 0x00000002
++
++#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
++
++#define FILE_FLAG_OPEN_REQUIRING_OPLOCK 0x40000
++
++#define COPY_FILE_REQUEST_SECURITY_PRIVILEGES 0x2000
++#define COPY_FILE_RESUME_FROM_PAUSE 0x4000
++#define COPY_FILE_NO_OFFLOAD 0x40000
++
++#define MEMORY_PRIORITY_LOWEST 0
++#define MEMORY_PRIORITY_VERY_LOW 1
++#define MEMORY_PRIORITY_LOW 2
++#define MEMORY_PRIORITY_MEDIUM 3
++#define MEMORY_PRIORITY_BELOW_NORMAL 4
++#define MEMORY_PRIORITY_NORMAL 5
++
++#define OPERATION_API_VERSION 1
++#define OPERATION_START_TRACE_CURRENT_THREAD 1
++#define OPERATION_END_DISCARD 1
++
++#define MEHC_PATROL_SCRUBBER_PRESENT 0x1
++
++#define STORAGE_INFO_FLAGS_ALIGNED_DEVICE 0x00000001
++#define STORAGE_INFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE 0x00000002
++#define STORAGE_INFO_OFFSET_UNKNOWN 0xffffffff
++
++#define REMOTE_PROTOCOL_INFO_FLAG_PERSISTENT_HANDLE 0x00000004
++
++#define RPI_FLAG_SMB2_SHARECAP_TIMEWARP 0x00000002
++#define RPI_FLAG_SMB2_SHARECAP_DFS 0x00000008
++#define RPI_FLAG_SMB2_SHARECAP_CONTINUOUS_AVAILABILITY 0x00000010
++#define RPI_FLAG_SMB2_SHARECAP_SCALEOUT 0x00000020
++#define RPI_FLAG_SMB2_SHARECAP_CLUSTER 0x00000040
++
++#define RPI_SMB2_FLAG_SERVERCAP_DFS 0x00000001
++#define RPI_SMB2_FLAG_SERVERCAP_LEASING 0x00000002
++#define RPI_SMB2_FLAG_SERVERCAP_LARGEMTU 0x00000004
++#define RPI_SMB2_FLAG_SERVERCAP_MULTICHANNEL 0x00000008
++#define RPI_SMB2_FLAG_SERVERCAP_PERSISTENT_HANDLES 0x00000010
++#define RPI_SMB2_FLAG_SERVERCAP_DIRECTORY_LEASING 0x00000020
++
++#endif /* Win8 and later */
+ #endif /* Win7 and later */
+ #endif /* WinVista and later */
+ #endif /* WinXP and later */
+@@ -1346,6 +1432,7 @@
+ WINBASEAPI BOOL WINAPI CallNamedPipeW
+ (LPCWSTR, PVOID, DWORD, PVOID, DWORD, PDWORD, DWORD);
+
++WINBASEAPI BOOL WINAPI RequestDeviceWakeup (HANDLE hDevice);
+ WINBASEAPI BOOL WINAPI CancelDeviceWakeupRequest (HANDLE);
+ WINBASEAPI BOOL WINAPI CancelIo (HANDLE);
+ WINBASEAPI BOOL WINAPI CancelWaitableTimer (HANDLE);
+@@ -1691,6 +1778,8 @@
+
+ WINBASEAPI BOOL WINAPI GetDevicePowerState (HANDLE, BOOL *);
+
++WINBASEAPI BOOL WINAPI SetMessageWaitingIndicator (HANDLE hMsgIndicator, ULONG ulMsgCount);
++
+ #define GetDiskFreeSpace __AW_SUFFIXED__(GetDiskFreeSpace)
+ WINBASEAPI BOOL WINAPI GetDiskFreeSpaceA
+ (LPCSTR, PDWORD, PDWORD, PDWORD, PDWORD);
+@@ -2034,6 +2123,7 @@
+ WINBASEAPI BOOL WINAPI IsBadWritePtr (PVOID, UINT);
+ WINBASEAPI BOOL WINAPI IsDebuggerPresent (void);
+ WINBASEAPI BOOL WINAPI IsProcessorFeaturePresent (DWORD);
++WINBASEAPI BOOL WINAPI RequestWakeupLatency (LATENCY_TIME latency);
+ WINBASEAPI BOOL WINAPI IsSystemResumeAutomatic (void);
+ WINBASEAPI BOOL WINAPI IsTextUnicode (PCVOID, int, LPINT);
+ WINBASEAPI BOOL WINAPI IsValidAcl (PACL);
+@@ -2516,6 +2606,8 @@
+ WINBASEAPI BOOL WINAPI ConvertFiberToThread (void);
+ WINBASEAPI LPVOID WINAPI CreateFiberEx
+ (SIZE_T, SIZE_T, DWORD, LPFIBER_START_ROUTINE, LPVOID);
++#define FIBER_FLAG_FLOAT_SWITCH 0x1
++WINBASEAPI LPVOID WINAPI ConvertThreadToFiberEx(LPVOID lpParameter,DWORD dwFlags);
+ #endif /* Win9x, but not WinNT until NT4 */
+
+ #if _WIN32_WINDOWS >= _WIN32_WINDOWS_98 || _WIN32_WINNT >= _WIN32_WINNT_WIN2K
+@@ -2597,6 +2689,7 @@
+ );
+ #define LOGON_WITH_PROFILE 0x00000001
+ #define LOGON_NETCREDENTIALS_ONLY 0x00000002
++#define LOGON_ZERO_PASSWORD_BUFFER 0x80000000
+
+ WINBASEAPI BOOL WINAPI CreateRestrictedToken
+ ( HANDLE, DWORD, DWORD, PSID_AND_ATTRIBUTES, DWORD, PLUID_AND_ATTRIBUTES,
+@@ -2615,6 +2708,10 @@
+ WINBASEAPI BOOL WINAPI DeleteTimerQueueEx (HANDLE, HANDLE);
+ WINBASEAPI BOOL WINAPI DeleteTimerQueueTimer (HANDLE, HANDLE, HANDLE);
+
++WINBASEAPI HANDLE WINAPI SetTimerQueueTimer (HANDLE TimerQueue, WAITORTIMERCALLBACK Callback, PVOID Parameter, DWORD DueTime, DWORD Period, BOOL PreferIo);
++WINBASEAPI BOOL WINAPI CancelTimerQueueTimer (HANDLE TimerQueue, HANDLE Timer);
++WINBASEAPI BOOL WINAPI DeleteTimerQueue (HANDLE TimerQueue);
++
+ #define DeleteVolumeMountPoint __AW_SUFFIXED__(DeleteVolumeMountPoint)
+ WINBASEAPI BOOL WINAPI DeleteVolumeMountPointA (LPCSTR);
+ WINBASEAPI BOOL WINAPI DeleteVolumeMountPointW (LPCWSTR);
+@@ -2711,6 +2808,12 @@
+ WINBASEAPI BOOL WINAPI MapUserPhysicalPagesScatter
+ (PVOID *, ULONG_PTR, PULONG_PTR);
+
++typedef struct _EVENTLOG_FULL_INFORMATION {
++ DWORD dwFull;
++} EVENTLOG_FULL_INFORMATION,*LPEVENTLOG_FULL_INFORMATION;
++
++WINADVAPI BOOL WINAPI GetEventLogInformation (HANDLE hEventLog, DWORD dwInfoLevel, LPVOID lpBuffer, DWORD cbBufSize, LPDWORD pcbBytesNeeded);
++
+ #if _WIN32_WINNT >= _WIN32_WINNT_WINXP
+ /* New features, implemented for WinXP; not available in Win9x.
+ */
+@@ -2845,6 +2948,29 @@
+
+ WINBASEAPI BOOL WINAPI ZombifyActCtx (HANDLE);
+
++#define OpenEncryptedFileRaw __AW_SUFFIXED__(OpenEncryptedFileRaw)
++WINADVAPI DWORD WINAPI OpenEncryptedFileRawA (LPCSTR lpFileName, ULONG ulFlags, PVOID *pvContext);
++WINADVAPI DWORD WINAPI OpenEncryptedFileRawW (LPCWSTR lpFileName, ULONG ulFlags, PVOID *pvContext);
++
++typedef DWORD (WINAPI *PFE_EXPORT_FUNC) (PBYTE pbData, PVOID pvCallbackContext, ULONG ulLength);
++typedef DWORD (WINAPI *PFE_IMPORT_FUNC) (PBYTE pbData, PVOID pvCallbackContext, PULONG ulLength);
++WINADVAPI DWORD WINAPI ReadEncryptedFileRaw (PFE_EXPORT_FUNC pfExportCallback, PVOID pvCallbackContext, PVOID pvContext);
++WINADVAPI DWORD WINAPI WriteEncryptedFileRaw (PFE_IMPORT_FUNC pfImportCallback, PVOID pvCallbackContext, PVOID pvContext);
++WINADVAPI VOID WINAPI CloseEncryptedFileRaw (PVOID pvContext);
++
++/* TODO: requires includes for AUDIT_EVENT_TYPE and POBJECT_TYPE_LIST
++WINADVAPI BOOL WINAPI AccessCheckByTypeAndAuditAlarmA (LPCSTR SubsystemName, LPVOID HandleId, LPCSTR ObjectTypeName, LPCSTR ObjectName, PSECURITY_DESCRIPTOR SecurityDescriptor, PSID PrincipalSelfSid, DWORD DesiredAccess, AUDIT_EVENT_TYPE AuditType, DWORD Flags, POBJECT_TYPE_LIST ObjectTypeList, DWORD ObjectTypeListLength, PGENERIC_MAPPING GenericMapping, BOOL ObjectCreation, LPDWORD GrantedAccess, LPBOOL AccessStatus, LPBOOL pfGenerateOnClose);
++WINADVAPI BOOL WINAPI AccessCheckByTypeResultListAndAuditAlarmA (LPCSTR SubsystemName, LPVOID HandleId, LPCSTR ObjectTypeName, LPCSTR ObjectName, PSECURITY_DESCRIPTOR SecurityDescriptor, PSID PrincipalSelfSid, DWORD DesiredAccess, AUDIT_EVENT_TYPE AuditType, DWORD Flags, POBJECT_TYPE_LIST ObjectTypeList, DWORD ObjectTypeListLength, PGENERIC_MAPPING GenericMapping, BOOL ObjectCreation, LPDWORD GrantedAccess, LPDWORD AccessStatusList, LPBOOL pfGenerateOnClose);
++WINADVAPI BOOL WINAPI AccessCheckByTypeResultListAndAuditAlarmByHandleA (LPCSTR SubsystemName, LPVOID HandleId, HANDLE ClientToken, LPCSTR ObjectTypeName, LPCSTR ObjectName, PSECURITY_DESCRIPTOR SecurityDescriptor, PSID PrincipalSelfSid, DWORD DesiredAccess, AUDIT_EVENT_TYPE AuditType, DWORD Flags, POBJECT_TYPE_LIST ObjectTypeList, DWORD ObjectTypeListLength, PGENERIC_MAPPING GenericMapping, BOOL ObjectCreation, LPDWORD GrantedAccess, LPDWORD AccessStatusList, LPBOOL pfGenerateOnClose);
++ */
++
++#define LogonUserEx __AW_SUFFIXED__(LogonUserEx)
++WINADVAPI BOOL WINAPI LogonUserExA (LPCSTR lpszUsername, LPCSTR lpszDomain, LPCSTR lpszPassword, DWORD dwLogonType, DWORD dwLogonProvider, PHANDLE phToken, PSID *ppLogonSid, PVOID *ppProfileBuffer, LPDWORD pdwProfileLength, PQUOTA_LIMITS pQuotaLimits);
++WINADVAPI BOOL WINAPI LogonUserExW (LPCWSTR lpszUsername, LPCWSTR lpszDomain, LPCWSTR lpszPassword, DWORD dwLogonType, DWORD dwLogonProvider, PHANDLE phToken, PSID *ppLogonSid, PVOID *ppProfileBuffer, LPDWORD pdwProfileLength, PQUOTA_LIMITS pQuotaLimits);
++
++WINADVAPI BOOL WINAPI IsTokenUntrusted (HANDLE TokenHandle);
++WINBASEAPI BOOL WINAPI BindIoCompletionCallback (HANDLE FileHandle, LPOVERLAPPED_COMPLETION_ROUTINE Function, ULONG Flags);
++
+ #if _WIN32_WINNT >= _WIN32_WINNT_WS03
+ /* Further added features, which became available on the WinNT platform
+ * from Windows Server-2003; these were never made available in Win9x.
+@@ -2902,6 +3023,21 @@
+ WCHAR FileName[1];
+ } FILE_NAME_INFO, *PFILE_NAME_INFO, *LPFILE_NAME_INFO;
+
++typedef struct _FILE_RENAME_INFO {
++ BOOLEAN ReplaceIfExists;
++ HANDLE RootDirectory;
++ DWORD FileNameLength;
++ WCHAR FileName[1];
++} FILE_RENAME_INFO,*PFILE_RENAME_INFO;
++
++typedef struct _FILE_ALLOCATION_INFO {
++ LARGE_INTEGER AllocationSize;
++} FILE_ALLOCATION_INFO,*PFILE_ALLOCATION_INFO;
++
++typedef struct _FILE_END_OF_FILE_INFO {
++ LARGE_INTEGER EndOfFile;
++} FILE_END_OF_FILE_INFO,*PFILE_END_OF_FILE_INFO;
++
+ typedef struct _FILE_STREAM_INFO
+ /* http://msdn.microsoft.com/en-us/library/aa364406%28v=VS.85%29.aspx */
+ { DWORD NextEntryOffset;
+@@ -2927,6 +3063,10 @@
+ DWORD ReparseTag;
+ } FILE_ATTRIBUTE_TAG_INFO, *PFILE_ATTRIBUTE_TAG_INFO, *LPFILE_ATTRIBUTE_TAG_INFO;
+
++typedef struct _FILE_DISPOSITION_INFO {
++ BOOLEAN DeleteFile;
++} FILE_DISPOSITION_INFO,*PFILE_DISPOSITION_INFO;
++
+ typedef struct _FILE_ID_BOTH_DIR_INFO
+ /* http://msdn.microsoft.com/en-us/library/aa364226%28v=VS.85%29.aspx */
+ { DWORD NextEntryOffset;
+@@ -2946,6 +3086,32 @@
+ WCHAR FileName[1];
+ } FILE_ID_BOTH_DIR_INFO, *PFILE_ID_BOTH_DIR_INFO, *LPFILE_ID_BOTH_DIR_INFO;
+
++typedef struct _FILE_FULL_DIR_INFO {
++ ULONG NextEntryOffset;
++ ULONG FileIndex;
++ LARGE_INTEGER CreationTime;
++ LARGE_INTEGER LastAccessTime;
++ LARGE_INTEGER LastWriteTime;
++ LARGE_INTEGER ChangeTime;
++ LARGE_INTEGER EndOfFile;
++ LARGE_INTEGER AllocationSize;
++ ULONG FileAttributes;
++ ULONG FileNameLength;
++ ULONG EaSize;
++ WCHAR FileName[1];
++} FILE_FULL_DIR_INFO,*PFILE_FULL_DIR_INFO;
++
++typedef enum _PRIORITY_HINT {
++ IoPriorityHintVeryLow = 0,
++ IoPriorityHintLow,
++ IoPriorityHintNormal,
++ MaximumIoPriorityHintType
++} PRIORITY_HINT;
++
++typedef struct _FILE_IO_PRIORITY_HINT_INFO {
++ PRIORITY_HINT PriorityHint;
++} FILE_IO_PRIORITY_HINT_INFO,*PFILE_IO_PRIORITY_HINT_INFO;
++
+ typedef struct _FILE_REMOTE_PROTOCOL_INFO
+ /* http://msdn.microsoft.com/en-us/library/dd979524%28v=VS.85%29.aspx */
+ { USHORT StructureVersion;
+@@ -2959,9 +3125,24 @@
+ struct
+ { ULONG Reserved[8];
+ } GenericReserved;
++#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
++ union {
++ struct {
++ struct {
++ ULONG Capabilities;
++ } Server;
++ struct {
++ ULONG Capabilities;
++ ULONG CachingFlags;
++ } Share;
++ } Smb2;
++ ULONG Reserved[16];
++ } ProtocolSpecific;
++#else
+ struct
+ { ULONG Reserved[16];
+ } ProtocolSpecificReserved;
++#endif
+ } FILE_REMOTE_PROTOCOL_INFO, *PFILE_REMOTE_PROTOCOL_INFO, *LPFILE_REMOTE_PROTOCOL_INFO;
+
+ typedef enum _DEP_SYSTEM_POLICY_TYPE
+@@ -2994,6 +3175,10 @@
+ WINBASEAPI BOOL WINAPI CreateSymbolicLinkA (LPCSTR, LPCSTR, DWORD);
+ WINBASEAPI BOOL WINAPI CreateSymbolicLinkW (LPCWSTR, LPCWSTR, DWORD);
+
++#define CreateSymbolicLinkTransacted __AW_SUFFIXED__(CreateSymbolicLinkTransacted)
++WINBASEAPI BOOLEAN APIENTRY CreateSymbolicLinkTransactedA (LPCSTR lpSymlinkFileName, LPCSTR lpTargetFileName, DWORD dwFlags, HANDLE hTransaction);
++WINBASEAPI BOOLEAN APIENTRY CreateSymbolicLinkTransactedW (LPCWSTR lpSymlinkFileName, LPCWSTR lpTargetFileName, DWORD dwFlags, HANDLE hTransaction);
++
+ /* http://msdn.microsoft.com/en-us/library/aa364953%28VS.85%29.aspx */
+ WINBASEAPI BOOL WINAPI GetFileInformationByHandleEx
+ (HANDLE, FILE_INFO_BY_HANDLE_CLASS, LPVOID, DWORD);
+@@ -3029,6 +3214,200 @@
+ void WINAPI WakeAllConditionVariable (PCONDITION_VARIABLE);
+ void WINAPI WakeConditionVariable (PCONDITION_VARIABLE);
+
++WINBASEAPI LPVOID WINAPI VirtualAllocExNuma (HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect, DWORD nndPreferred);
++
++#define GetLongPathNameTransacted __AW_SUFFIXED__(GetLongPathNameTransacted)
++WINBASEAPI DWORD WINAPI GetLongPathNameTransactedA (LPCSTR lpszShortPath, LPSTR lpszLongPath, DWORD cchBuffer, HANDLE hTransaction);
++WINBASEAPI DWORD WINAPI GetLongPathNameTransactedW (LPCWSTR lpszShortPath, LPWSTR lpszLongPath, DWORD cchBuffer, HANDLE hTransaction);
++
++WINBASEAPI BOOL WINAPI SetFileCompletionNotificationModes (HANDLE FileHandle, UCHAR Flags);
++WINBASEAPI BOOL WINAPI SetFileIoOverlappedRange (HANDLE FileHandle, PUCHAR OverlappedRangeStart, ULONG Length);
++
++/* PWOW64_CONTEXT type not defined in MinGW32
++WINBASEAPI BOOL WINAPI Wow64GetThreadContext (HANDLE hThread, PWOW64_CONTEXT lpContext);
++WINBASEAPI BOOL WINAPI Wow64SetThreadContext (HANDLE hThread, CONST WOW64_CONTEXT *lpContext);
++ */
++
++WINBASEAPI DWORD WINAPI Wow64SuspendThread (HANDLE hThread);
++
++/* LPPROC_THREAD_ATTRIBUTE_LIST not defined
++typedef struct _STARTUPINFOEXA {
++ STARTUPINFOA StartupInfo;
++ LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList;
++} STARTUPINFOEXA,*LPSTARTUPINFOEXA;
++
++typedef struct _STARTUPINFOEXW {
++ STARTUPINFOW StartupInfo;
++ LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList;
++} STARTUPINFOEXW,*LPSTARTUPINFOEXW;
++
++typedef __AW_ALIAS__(STARTUPINFOEX), *LPSTARTUPINFOEX;
++ */
++
++#define CreateSemaphoreEx __AW_SUFFIXED__(CreateSemaphoreEx)
++WINBASEAPI HANDLE WINAPI CreateSemaphoreExA (LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess);
++WINBASEAPI HANDLE WINAPI CreateSemaphoreExW (LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG lInitialCount, LONG lMaximumCount, LPCWSTR lpName, DWORD dwFlags, DWORD dwDesiredAccess);
++
++#define CreateWaitableTimerEx __AW_SUFFIXED__(CreateWaitableTimerEx)
++WINBASEAPI HANDLE WINAPI CreateWaitableTimerExA (LPSECURITY_ATTRIBUTES lpTimerAttributes, LPCSTR lpTimerName, DWORD dwFlags, DWORD dwDesiredAccess);
++WINBASEAPI HANDLE WINAPI CreateWaitableTimerExW (LPSECURITY_ATTRIBUTES lpTimerAttributes, LPCWSTR lpTimerName, DWORD dwFlags, DWORD dwDesiredAccess);
++
++#define CreateFileMappingNuma __AW_SUFFIXED__(CreateFileMappingNuma)
++WINBASEAPI HANDLE WINAPI CreateFileMappingNumaA (HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName, DWORD nndPreferred);
++WINBASEAPI HANDLE WINAPI CreateFileMappingNumaW (HANDLE hFile, LPSECURITY_ATTRIBUTES lpFileMappingAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCWSTR lpName, DWORD nndPreferred);
++
++#define QueryFullProcessImageName __AW_SUFFIXED__(QueryFullProcessImageName)
++WINBASEAPI BOOL WINAPI QueryFullProcessImageNameA (HANDLE hProcess, DWORD dwFlags, LPSTR lpExeName, PDWORD lpdwSize);
++WINBASEAPI BOOL WINAPI QueryFullProcessImageNameW (HANDLE hProcess, DWORD dwFlags, LPWSTR lpExeName, PDWORD lpdwSize);
++
++#ifndef _USE_FULL_PROC_THREAD_ATTRIBUTE
++ typedef enum _PROC_THREAD_ATTRIBUTE_NUM {
++ ProcThreadAttributeParentProcess = 0,
++ ProcThreadAttributeHandleList = 2
++#if _WIN32_WINNT >= _WIN32_WINNT_WIN7
++ ,ProcThreadAttributeGroupAffinity = 3,
++ ProcThreadAttributePreferredNode = 4,
++ ProcThreadAttributeIdealProcessor = 5,
++ ProcThreadAttributeUmsThread = 6,
++ ProcThreadAttributeMitigationPolicy = 7
++#endif
++#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
++ ,ProcThreadAttributeSecurityCapabilities = 9
++#endif
++ } PROC_THREAD_ATTRIBUTE_NUM;
++#endif
++
++WINBASEAPI BOOLEAN WINAPI Wow64EnableWow64FsRedirection (BOOLEAN Wow64FsEnableRedirection);
++
++#define CreateDirectoryTransacted __AW_SUFFIXED__(CreateDirectoryTransacted)
++WINBASEAPI BOOL WINAPI CreateDirectoryTransactedA (LPCSTR lpTemplateDirectory, LPCSTR lpNewDirectory, LPSECURITY_ATTRIBUTES lpSecurityAttributes, HANDLE hTransaction);
++WINBASEAPI BOOL WINAPI CreateDirectoryTransactedW (LPCWSTR lpTemplateDirectory, LPCWSTR lpNewDirectory, LPSECURITY_ATTRIBUTES lpSecurityAttributes, HANDLE hTransaction);
++
++#define RemoveDirectoryTransacted __AW_SUFFIXED__(RemoveDirectoryTransacted)
++WINBASEAPI BOOL WINAPI RemoveDirectoryTransactedA (LPCSTR lpPathName, HANDLE hTransaction);
++WINBASEAPI BOOL WINAPI RemoveDirectoryTransactedW (LPCWSTR lpPathName, HANDLE hTransaction);
++
++#define GetFullPathNameTransacted __AW_SUFFIXED__(GetFullPathNameTransacted)
++WINBASEAPI DWORD WINAPI GetFullPathNameTransactedA (LPCSTR lpFileName, DWORD nBufferLength, LPSTR lpBuffer, LPSTR *lpFilePart, HANDLE hTransaction);
++WINBASEAPI DWORD WINAPI GetFullPathNameTransactedW (LPCWSTR lpFileName, DWORD nBufferLength, LPWSTR lpBuffer, LPWSTR *lpFilePart, HANDLE hTransaction);
++
++#define CreateFileTransacted __AW_SUFFIXED__(CreateFileTransacted)
++WINBASEAPI HANDLE WINAPI CreateFileTransactedA (LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile, HANDLE hTransaction, PUSHORT pusMiniVersion, PVOID lpExtendedParameter);
++WINBASEAPI HANDLE WINAPI CreateFileTransactedW (LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile, HANDLE hTransaction, PUSHORT pusMiniVersion, PVOID lpExtendedParameter);
++
++#define SetFileAttributesTransacted __AW_SUFFIXED__(SetFileAttributesTransacted)
++WINBASEAPI BOOL WINAPI SetFileAttributesTransactedA (LPCSTR lpFileName, DWORD dwFileAttributes, HANDLE hTransaction);
++WINBASEAPI BOOL WINAPI SetFileAttributesTransactedW (LPCWSTR lpFileName, DWORD dwFileAttributes, HANDLE hTransaction);
++
++#define GetFileAttributesTransacted __AW_SUFFIXED__(GetFileAttributesTransacted)
++WINBASEAPI BOOL WINAPI GetFileAttributesTransactedA (LPCSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation, HANDLE hTransaction);
++WINBASEAPI BOOL WINAPI GetFileAttributesTransactedW (LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation, HANDLE hTransaction);
++
++#define GetCompressedFileSizeTransacted __AW_SUFFIXED__(GetCompressedFileSizeTransacted)
++WINBASEAPI DWORD WINAPI GetCompressedFileSizeTransactedA (LPCSTR lpFileName, LPDWORD lpFileSizeHigh, HANDLE hTransaction);
++WINBASEAPI DWORD WINAPI GetCompressedFileSizeTransactedW (LPCWSTR lpFileName, LPDWORD lpFileSizeHigh, HANDLE hTransaction);
++
++#define DeleteFileTransacted __AW_SUFFIXED__(DeleteFileTransacted)
++WINBASEAPI BOOL WINAPI DeleteFileTransactedA (LPCSTR lpFileName, HANDLE hTransaction);
++WINBASEAPI BOOL WINAPI DeleteFileTransactedW (LPCWSTR lpFileName, HANDLE hTransaction);
++
++#define FindFirstFileTransacted __AW_SUFFIXED__(FindFirstFileTransacted)
++WINBASEAPI HANDLE WINAPI FindFirstFileTransactedA (LPCSTR lpFileName, FINDEX_INFO_LEVELS fInfoLevelId, LPVOID lpFindFileData, FINDEX_SEARCH_OPS fSearchOp, LPVOID lpSearchFilter, DWORD dwAdditionalFlags, HANDLE hTransaction);
++WINBASEAPI HANDLE WINAPI FindFirstFileTransactedW (LPCWSTR lpFileName, FINDEX_INFO_LEVELS fInfoLevelId, LPVOID lpFindFileData, FINDEX_SEARCH_OPS fSearchOp, LPVOID lpSearchFilter, DWORD dwAdditionalFlags, HANDLE hTransaction);
++
++#define CopyFileTransacted __AW_SUFFIXED__(CopyFileTransacted)
++WINBASEAPI BOOL WINAPI CopyFileTransactedA (LPCSTR lpExistingFileName, LPCSTR lpNewFileName, LPPROGRESS_ROUTINE lpProgressRoutine, LPVOID lpData, LPBOOL pbCancel, DWORD dwCopyFlags, HANDLE hTransaction);
++WINBASEAPI BOOL WINAPI CopyFileTransactedW (LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, LPPROGRESS_ROUTINE lpProgressRoutine, LPVOID lpData, LPBOOL pbCancel, DWORD dwCopyFlags, HANDLE hTransaction);
++
++#define MoveFileTransacted __AW_SUFFIXED__(MoveFileTransacted)
++WINBASEAPI BOOL WINAPI MoveFileTransactedA (LPCSTR lpExistingFileName, LPCSTR lpNewFileName, LPPROGRESS_ROUTINE lpProgressRoutine, LPVOID lpData, DWORD dwFlags, HANDLE hTransaction);
++WINBASEAPI BOOL WINAPI MoveFileTransactedW (LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, LPPROGRESS_ROUTINE lpProgressRoutine, LPVOID lpData, DWORD dwFlags, HANDLE hTransaction);
++
++#define CreateHardLinkTransacted __AW_SUFFIXED__(CreateHardLinkTransacted)
++WINBASEAPI BOOL WINAPI CreateHardLinkTransactedA (LPCSTR lpFileName, LPCSTR lpExistingFileName, LPSECURITY_ATTRIBUTES lpSecurityAttributes, HANDLE hTransaction);
++WINBASEAPI BOOL WINAPI CreateHardLinkTransactedW (LPCWSTR lpFileName, LPCWSTR lpExistingFileName, LPSECURITY_ATTRIBUTES lpSecurityAttributes, HANDLE hTransaction);
++
++typedef enum _STREAM_INFO_LEVELS {
++ FindStreamInfoStandard,
++ FindStreamInfoMaxInfoLevel
++} STREAM_INFO_LEVELS;
++
++typedef struct _WIN32_FIND_STREAM_DATA {
++ LARGE_INTEGER StreamSize;
++ WCHAR cStreamName[MAX_PATH + 36];
++} WIN32_FIND_STREAM_DATA,*PWIN32_FIND_STREAM_DATA;
++
++WINBASEAPI HANDLE WINAPI FindFirstStreamW (LPCWSTR lpFileName, STREAM_INFO_LEVELS InfoLevel, LPVOID lpFindStreamData, DWORD dwFlags);
++WINBASEAPI BOOL APIENTRY FindNextStreamW (HANDLE hFindStream, LPVOID lpFindStreamData);
++WINBASEAPI HANDLE WINAPI FindFirstStreamTransactedW (LPCWSTR lpFileName, STREAM_INFO_LEVELS InfoLevel, LPVOID lpFindStreamData, DWORD dwFlags, HANDLE hTransaction);
++WINBASEAPI HANDLE WINAPI FindFirstFileNameW (LPCWSTR lpFileName, DWORD dwFlags, LPDWORD StringLength, PWSTR LinkName);
++WINBASEAPI BOOL APIENTRY FindNextFileNameW (HANDLE hFindStream, LPDWORD StringLength, PWSTR LinkName);
++WINBASEAPI HANDLE WINAPI FindFirstFileNameTransactedW (LPCWSTR lpFileName, DWORD dwFlags, LPDWORD StringLength, PWSTR LinkName, HANDLE hTransaction);
++WINBASEAPI BOOL WINAPI GetNamedPipeClientComputerNameA (HANDLE Pipe, LPSTR ClientComputerName, ULONG ClientComputerNameLength);
++WINBASEAPI BOOL WINAPI GetNamedPipeClientProcessId (HANDLE Pipe, PULONG ClientProcessId);
++WINBASEAPI BOOL WINAPI GetNamedPipeClientSessionId (HANDLE Pipe, PULONG ClientSessionId);
++WINBASEAPI BOOL WINAPI GetNamedPipeServerProcessId (HANDLE Pipe, PULONG ServerProcessId);
++WINBASEAPI BOOL WINAPI GetNamedPipeServerSessionId (HANDLE Pipe, PULONG ServerSessionId);
++WINBASEAPI BOOL WINAPI SetFileBandwidthReservation (HANDLE hFile, DWORD nPeriodMilliseconds, DWORD nBytesPerPeriod, BOOL bDiscardable, LPDWORD lpTransferSize, LPDWORD lpNumOutstandingRequests);
++WINBASEAPI BOOL WINAPI GetFileBandwidthReservation (HANDLE hFile, LPDWORD lpPeriodMilliseconds, LPDWORD lpBytesPerPeriod, LPBOOL pDiscardable, LPDWORD lpTransferSize, LPDWORD lpNumOutstandingRequests);
++
++WINBASEAPI LPVOID WINAPI MapViewOfFileExNuma (HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap, LPVOID lpBaseAddress, DWORD nndPreferred);
++
++WINADVAPI BOOL WINAPI CreateProcessWithTokenW (HANDLE hToken, DWORD dwLogonFlags, LPCWSTR lpApplicationName, LPWSTR lpCommandLine, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation);
++
++WINBASEAPI HANDLE WINAPI CreatePrivateNamespaceA (LPSECURITY_ATTRIBUTES lpPrivateNamespaceAttributes, LPVOID lpBoundaryDescriptor, LPCSTR lpAliasPrefix);
++WINBASEAPI HANDLE WINAPI OpenPrivateNamespaceA (LPVOID lpBoundaryDescriptor, LPCSTR lpAliasPrefix);
++WINBASEAPI HANDLE APIENTRY CreateBoundaryDescriptorA (LPCSTR Name, ULONG Flags);
++WINBASEAPI BOOL WINAPI AddIntegrityLabelToBoundaryDescriptor (HANDLE *BoundaryDescriptor, PSID IntegrityLabel);
++
++WINBASEAPI BOOL WINAPI AllocateUserPhysicalPagesNuma (HANDLE hProcess, PULONG_PTR NumberOfPages, PULONG_PTR PageArray, DWORD nndPreferred);
++
++WINBASEAPI DWORD WINAPI WTSGetActiveConsoleSessionId (VOID);
++
++WINBASEAPI BOOL WINAPI GetNumaProcessorNode (UCHAR Processor, PUCHAR NodeNumber);
++WINBASEAPI BOOL WINAPI GetNumaNodeProcessorMask (UCHAR Node, PULONGLONG ProcessorMask);
++WINBASEAPI BOOL WINAPI GetNumaAvailableMemoryNode (UCHAR Node, PULONGLONG AvailableBytes);
++WINBASEAPI BOOL WINAPI GetNumaProximityNode (ULONG ProximityId, PUCHAR NodeNumber);
++
++typedef DWORD (WINAPI *APPLICATION_RECOVERY_CALLBACK) (PVOID pvParameter);
++
++WINBASEAPI HRESULT WINAPI RegisterApplicationRecoveryCallback (APPLICATION_RECOVERY_CALLBACK pRecoveyCallback, PVOID pvParameter, DWORD dwPingInterval, DWORD dwFlags);
++WINBASEAPI HRESULT WINAPI UnregisterApplicationRecoveryCallback (void);
++WINBASEAPI HRESULT WINAPI RegisterApplicationRestart (PCWSTR pwzCommandline, DWORD dwFlags);
++WINBASEAPI HRESULT WINAPI UnregisterApplicationRestart (void);
++WINBASEAPI HRESULT WINAPI GetApplicationRecoveryCallback (HANDLE hProcess, APPLICATION_RECOVERY_CALLBACK *pRecoveryCallback, PVOID *ppvParameter, PDWORD pdwPingInterval, PDWORD pdwFlags);
++WINBASEAPI HRESULT WINAPI GetApplicationRestartSettings (HANDLE hProcess, PWSTR pwzCommandline, PDWORD pcchSize, PDWORD pdwFlags);
++WINBASEAPI HRESULT WINAPI ApplicationRecoveryInProgress (PBOOL pbCancelled);
++WINBASEAPI VOID WINAPI ApplicationRecoveryFinished (BOOL bSuccess);
++
++typedef enum _FILE_ID_TYPE {
++ FileIdType,
++ ObjectIdType,
++ ExtendedFileIdType,
++ MaximumFileIdType
++} FILE_ID_TYPE,*PFILE_ID_TYPE;
++
++typedef struct FILE_ID_DESCRIPTOR {
++ DWORD dwSize;
++ FILE_ID_TYPE Type;
++ __GNUC_EXTENSION union {
++ LARGE_INTEGER FileId;
++ GUID ObjectId;
++#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
++ FILE_ID_128 ExtendedFileId;
++#endif
++ };
++} FILE_ID_DESCRIPTOR,*LPFILE_ID_DESCRIPTOR;
++
++WINBASEAPI HANDLE WINAPI OpenFileById (HANDLE hVolumeHint, LPFILE_ID_DESCRIPTOR lpFileId, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwFlagsAndAttributes);
++
++WINBASEAPI BOOL WINAPI QueryActCtxSettingsW (DWORD dwFlags, HANDLE hActCtx, PCWSTR settingsNameSpace, PCWSTR settingName, PWSTR pvBuffer, SIZE_T dwBuffer, SIZE_T *pdwWrittenOrRequired);
++WINBASEAPI BOOL WINAPI ReplacePartitionUnit (PWSTR TargetPartition, PWSTR SparePartition, ULONG Flags);
++/* PSECURE_MEMORY_CACHE_CALLBACK not defined
++WINBASEAPI BOOL WINAPI AddSecureMemoryCacheCallback (PSECURE_MEMORY_CACHE_CALLBACK pfnCallBack);
++WINBASEAPI BOOL WINAPI RemoveSecureMemoryCacheCallback (PSECURE_MEMORY_CACHE_CALLBACK pfnCallBack);
++ */
++
+ #if _WIN32_WINNT >= _WIN32_WINNT_WIN7
+ /* Additional features, available only on the WinNT series platforms, from
+ * the release of Windows-7 onwards.
+@@ -3042,6 +3417,161 @@
+ BOOLEAN WINAPI TryAcquireSRWLockExclusive (PSRWLOCK);
+ BOOLEAN WINAPI TryAcquireSRWLockShared (PSRWLOCK);
+
++/* PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION not defined
++WINBASEAPI BOOL WINAPI GetProcessorSystemCycleTime (USHORT Group, PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION Buffer, PDWORD ReturnedLength);
++ */
++WINBASEAPI BOOL WINAPI GetPhysicallyInstalledSystemMemory (PULONGLONG TotalMemoryInKilobytes);
++
++/* REASON_CONTEXT type not defined in MinGW32
++typedef REASON_CONTEXT POWER_REQUEST_CONTEXT,*PPOWER_REQUEST_CONTEXT,*LPPOWER_REQUEST_CONTEXT;
++
++WINBASEAPI HANDLE WINAPI PowerCreateRequest (PREASON_CONTEXT Context);
++WINBASEAPI BOOL WINAPI PowerSetRequest (HANDLE PowerRequest, POWER_REQUEST_TYPE RequestType);
++WINBASEAPI BOOL WINAPI PowerClearRequest (HANDLE PowerRequest, POWER_REQUEST_TYPE RequestType);
++ */
++
++WINBASEAPI DWORD WINAPI GetThreadErrorMode (VOID);
++WINBASEAPI BOOL WINAPI SetThreadErrorMode (DWORD dwNewMode, LPDWORD lpOldMode);
++
++/* PWOW64_LDT_ENTRY type not defined in MinGW32
++WINBASEAPI BOOL WINAPI Wow64GetThreadSelectorEntry (HANDLE hThread, DWORD dwSelector, PWOW64_LDT_ENTRY lpSelectorEntry);
++ */
++
++WINBASEAPI BOOL WINAPI SetSearchPathMode (DWORD Flags);
++
++WINADVAPI BOOL WINAPI AddConditionalAce (PACL pAcl, DWORD dwAceRevision, DWORD AceFlags, UCHAR AceType, DWORD AccessMask, PSID pSid, PWCHAR ConditionStr, DWORD *ReturnLength);
++
++#define LookupAccountNameLocal __AW_SUFFIXED__(LookupAccountNameLocal)
++WINADVAPI BOOL WINAPI LookupAccountNameLocalA (LPCSTR lpAccountName, PSID Sid, LPDWORD cbSid, LPSTR ReferencedDomainName, LPDWORD cchReferencedDomainName, PSID_NAME_USE peUse);
++WINADVAPI BOOL WINAPI LookupAccountNameLocalW (LPCWSTR lpAccountName, PSID Sid, LPDWORD cbSid, LPWSTR ReferencedDomainName, LPDWORD cchReferencedDomainName, PSID_NAME_USE peUse);
++
++#define LookupAccountSidLocal __AW_SUFFIXED__(LookupAccountSidLocal)
++WINADVAPI BOOL WINAPI LookupAccountSidLocalA (PSID Sid, LPSTR Name, LPDWORD cchName, LPSTR ReferencedDomainName, LPDWORD cchReferencedDomainName, PSID_NAME_USE peUse);
++WINADVAPI BOOL WINAPI LookupAccountSidLocalW (PSID Sid, LPWSTR Name, LPDWORD cchName, LPWSTR ReferencedDomainName, LPDWORD cchReferencedDomainName, PSID_NAME_USE peUse);
++
++WINBASEAPI WORD WINAPI GetActiveProcessorGroupCount (VOID);
++WINBASEAPI WORD WINAPI GetMaximumProcessorGroupCount (VOID);
++WINBASEAPI DWORD WINAPI GetActiveProcessorCount (WORD GroupNumber);
++WINBASEAPI DWORD WINAPI GetMaximumProcessorCount (WORD GroupNumber);
++WINBASEAPI BOOL WINAPI GetNumaNodeNumberFromHandle (HANDLE hFile, PUSHORT NodeNumber);
++/* PPROCESSOR_NUMBER not defined
++WINBASEAPI BOOL WINAPI GetNumaProcessorNodeEx (PPROCESSOR_NUMBER Processor, PUSHORT NodeNumber);
++ */
++WINBASEAPI BOOL WINAPI GetNumaAvailableMemoryNodeEx (USHORT Node, PULONGLONG AvailableBytes);
++WINBASEAPI BOOL WINAPI GetNumaProximityNodeEx (ULONG ProximityId, PUSHORT NodeNumber);
++
++WINBASEAPI BOOL WINAPI CopyContext (PCONTEXT Destination, DWORD ContextFlags, PCONTEXT Source);
++WINBASEAPI BOOL WINAPI InitializeContext (PVOID Buffer, DWORD ContextFlags, PCONTEXT *Context, PDWORD ContextLength);
++
++#if defined (__x86_64__) || defined (__i386__)
++WINBASEAPI DWORD64 WINAPI GetEnabledXStateFeatures (VOID);
++WINBASEAPI BOOL WINAPI GetXStateFeaturesMask (PCONTEXT Context, PDWORD64 FeatureMask);
++WINBASEAPI PVOID WINAPI LocateXStateFeature (PCONTEXT Context, DWORD FeatureId, PDWORD Length);
++WINBASEAPI BOOL WINAPI SetXStateFeaturesMask (PCONTEXT Context, DWORD64 FeatureMask);
++#endif
++
++WINBASEAPI DWORD APIENTRY EnableThreadProfiling (HANDLE ThreadHandle, DWORD Flags, DWORD64 HardwareCounters, HANDLE *PerformanceDataHandle);
++WINBASEAPI DWORD APIENTRY DisableThreadProfiling (HANDLE PerformanceDataHandle);
++WINBASEAPI DWORD APIENTRY QueryThreadProfiling (HANDLE ThreadHandle, PBOOLEAN Enabled);
++/* PPERFORMANCE_DATA not defined
++WINBASEAPI DWORD APIENTRY ReadThreadProfilingData (HANDLE PerformanceDataHandle, DWORD Flags, PPERFORMANCE_DATA PerformanceData);
++ */
++
++#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
++
++typedef enum _THREAD_INFORMATION_CLASS {
++ ThreadMemoryPriority,
++ ThreadAbsoluteCpuPriority,
++ ThreadInformationClassMax
++} THREAD_INFORMATION_CLASS;
++
++typedef enum _PROCESS_INFORMATION_CLASS {
++ ProcessMemoryPriority,
++ ProcessInformationClassMax
++} PROCESS_INFORMATION_CLASS;
++
++
++WINBASEAPI BOOL WINAPI GetThreadInformation (HANDLE hThread, THREAD_INFORMATION_CLASS ThreadInformationClass, LPVOID ThreadInformation, DWORD ThreadInformationSize);
++WINBASEAPI BOOL WINAPI SetThreadInformation (HANDLE hThread, THREAD_INFORMATION_CLASS ThreadInformationClass, LPVOID ThreadInformation, DWORD ThreadInformationSize);
++WINBASEAPI BOOL WINAPI GetProcessInformation (HANDLE hProcess, PROCESS_INFORMATION_CLASS ProcessInformationClass, LPVOID ProcessInformation, DWORD ProcesInformationSize);
++WINBASEAPI BOOL WINAPI SetProcessInformation (HANDLE hProcess, PROCESS_INFORMATION_CLASS ProcessInformationClass, LPVOID ProcessInformation, DWORD ProcesInformationSize);
++
++typedef struct _MEMORY_PRIORITY_INFORMATION {
++ ULONG MemoryPriority;
++} MEMORY_PRIORITY_INFORMATION,*PMEMORY_PRIORITY_INFORMATION;
++
++#define GetFirmwareEnvironmentVariableEx __AW_SUFFIXED__(GetFirmwareEnvironmentVariableEx)
++WINBASEAPI DWORD WINAPI GetFirmwareEnvironmentVariableExA (LPCSTR lpName, LPCSTR lpGuid, PVOID pBuffer, DWORD nSize, PDWORD pdwAttribubutes);
++WINBASEAPI DWORD WINAPI GetFirmwareEnvironmentVariableExW (LPCWSTR lpName, LPCWSTR lpGuid, PVOID pBuffer, DWORD nSize, PDWORD pdwAttribubutes);
++
++#define SetFirmwareEnvironmentVariableEx __AW_SUFFIXED__(SetFirmwareEnvironmentVariableEx)
++WINBASEAPI BOOL WINAPI SetFirmwareEnvironmentVariableExA (LPCSTR lpName, LPCSTR lpGuid, PVOID pValue, DWORD nSize, DWORD dwAttributes);
++WINBASEAPI BOOL WINAPI SetFirmwareEnvironmentVariableExW (LPCWSTR lpName, LPCWSTR lpGuid, PVOID pValue, DWORD nSize, DWORD dwAttributes);
++
++WINBASEAPI BOOL WINAPI GetFirmwareType (PFIRMWARE_TYPE FirmwareType);
++WINBASEAPI BOOL WINAPI IsNativeVhdBoot (PBOOL NativeVhdBoot);
++
++typedef ULONG OPERATION_ID;
++
++typedef struct _OPERATION_START_PARAMETERS {
++ ULONG Version;
++ OPERATION_ID OperationId;
++ ULONG Flags;
++} OPERATION_START_PARAMETERS,*POPERATION_START_PARAMETERS;
++
++typedef struct _OPERATION_END_PARAMETERS {
++ ULONG Version;
++ OPERATION_ID OperationId;
++ ULONG Flags;
++} OPERATION_END_PARAMETERS,*POPERATION_END_PARAMETERS;
++
++WINADVAPI BOOL WINAPI OperationStart (OPERATION_START_PARAMETERS *OperationStartParams);
++WINADVAPI BOOL WINAPI OperationEnd (OPERATION_END_PARAMETERS *OperationEndParams);
++
++typedef VOID WINAPI BAD_MEMORY_CALLBACK_ROUTINE (VOID);
++typedef BAD_MEMORY_CALLBACK_ROUTINE *PBAD_MEMORY_CALLBACK_ROUTINE;
++
++WINBASEAPI PVOID WINAPI RegisterBadMemoryNotification (PBAD_MEMORY_CALLBACK_ROUTINE Callback);
++WINBASEAPI BOOL WINAPI UnregisterBadMemoryNotification (PVOID RegistrationHandle);
++WINBASEAPI BOOL WINAPI GetMemoryErrorHandlingCapabilities (PULONG Capabilities);
++
++typedef struct _FILE_ALIGNMENT_INFO {
++ ULONG AlignmentRequirement;
++} FILE_ALIGNMENT_INFO,*PFILE_ALIGNMENT_INFO;
++
++typedef struct _FILE_STORAGE_INFO {
++ ULONG LogicalBytesPerSector;
++ ULONG PhysicalBytesPerSectorForAtomicity;
++ ULONG PhysicalBytesPerSectorForPerformance;
++ ULONG FileSystemEffectivePhysicalBytesPerSectorForAtomicity;
++ ULONG Flags;
++ ULONG ByteOffsetForSectorAlignment;
++ ULONG ByteOffsetForPartitionAlignment;
++} FILE_STORAGE_INFO,*PFILE_STORAGE_INFO;
++
++typedef struct _FILE_ID_INFO {
++ ULONGLONG VolumeSerialNumber;
++ FILE_ID_128 FileId;
++} FILE_ID_INFO,*PFILE_ID_INFO;
++
++typedef struct _FILE_ID_EXTD_DIR_INFO {
++ ULONG NextEntryOffset;
++ ULONG FileIndex;
++ LARGE_INTEGER CreationTime;
++ LARGE_INTEGER LastAccessTime;
++ LARGE_INTEGER LastWriteTime;
++ LARGE_INTEGER ChangeTime;
++ LARGE_INTEGER EndOfFile;
++ LARGE_INTEGER AllocationSize;
++ ULONG FileAttributes;
++ ULONG FileNameLength;
++ ULONG EaSize;
++ ULONG ReparsePointTag;
++ FILE_ID_128 FileId;
++ WCHAR FileName[1];
++} FILE_ID_EXTD_DIR_INFO,*PFILE_ID_EXTD_DIR_INFO;
++
++#endif /* Win8 and later */
+ #endif /* Win7 and later */
+ #endif /* Windows Vista and later */
+ #endif /* Windows Server-2003 and later */
+--- w32api-5.0.2/include/ws2tcpip.h.orig 2017-11-09 02:35:48.000000000 +0100
++++ w32api-5.0.2/include/ws2tcpip.h 2018-09-17 05:43:14.524718024 +0200
+@@ -356,6 +356,41 @@
+ sockaddr_gen iiNetmask;
+ } INTERFACE_INFO, *LPINTERFACE_INFO;
+
++typedef enum _MULTICAST_MODE_TYPE {
++ MCAST_INCLUDE = 0,
++ MCAST_EXCLUDE
++} MULTICAST_MODE_TYPE;
++
++typedef struct _sockaddr_in6_pair {
++ PSOCKADDR_IN6 SourceAddress;
++ PSOCKADDR_IN6 DestinationAddress;
++} SOCKADDR_IN6_PAIR, *PSOCKADDR_IN6_PAIR;
++
++typedef union _SOCKADDR_INET {
++ SOCKADDR_IN Ipv4;
++ SOCKADDR_IN6 Ipv6;
++ ADDRESS_FAMILY si_family;
++} SOCKADDR_INET, *PSOCKADDR_INET;
++
++typedef struct group_filter {
++ ULONG gf_interface;
++ SOCKADDR_STORAGE gf_group;
++ MULTICAST_MODE_TYPE gf_fmode;
++ ULONG gf_numsrc;
++ SOCKADDR_STORAGE gf_slist[1];
++} GROUP_FILTER, *PGROUP_FILTER;
++
++typedef struct group_req {
++ ULONG gr_interface;
++ SOCKADDR_STORAGE gr_group;
++} GROUP_REQ, *PGROUP_REQ;
++
++typedef struct group_source_req {
++ ULONG gsr_interface;
++ SOCKADDR_STORAGE gsr_group;
++ SOCKADDR_STORAGE gsr_source;
++} GROUP_SOURCE_REQ, *PGROUP_SOURCE_REQ;
++
+ /*
+ The definition above can cause problems on NT4,prior to sp4.
+ To workaround, include the following struct and typedef and
+@@ -373,6 +373,152 @@
+ } OLD_INTERFACE_INFO;
+ */
+
++#if _WIN32_WINNT >= _WIN32_WINNT_VISTA
++
++#define addrinfoEx __AW_SUFFIXED__(addrinfoEx)
++typedef struct addrinfoExA {
++ int ai_flags;
++ int ai_family;
++ int ai_socktype;
++ int ai_protocol;
++ size_t ai_addrlen;
++ LPCSTR ai_canonname;
++ struct sockaddr *ai_addr;
++ void *ai_blob;
++ size_t ai_bloblen;
++ LPGUID ai_provider;
++ struct addrinfoexA *ai_next;
++} ADDRINFOEXA, *PADDRINFOEXA;
++
++typedef struct addrinfoExW {
++ int ai_flags;
++ int ai_family;
++ int ai_socktype;
++ int ai_protocol;
++ size_t ai_addrlen;
++ LPCWSTR ai_canonname;
++ struct sockaddr *ai_addr;
++ void *ai_blob;
++ size_t ai_bloblen;
++ LPGUID ai_provider;
++ struct addrinfoexW *ai_next;
++} ADDRINFOEXW, *PADDRINFOEXW;
++
++typedef __AW_ALIAS__(ADDRINFOEX), *PADDRINFOEX;
++
++typedef PVOID LPLOOKUPSERVICE_COMPLETION_ROUTINE; /*reserved*/
++
++#define GetAddrInfoEx __AW_SUFFIXED__(GetAddrInfoEx)
++WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExA(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace,
++ LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult,
++ PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
++ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
++ LPHANDLE lpNameHandle);
++WINSOCK_API_LINKAGE int WSAAPI GetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace,
++ LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult,
++ PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
++ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
++ LPHANDLE lpNameHandle);
++
++#define SetAddrInfoEx __AW_SUFFIXED__(SetAddrInfoEx)
++WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExA(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses,
++ DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
++ LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
++ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
++ LPHANDLE lpNameHandle);
++WINSOCK_API_LINKAGE int WSAAPI SetAddrInfoExW(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses,
++ DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
++ LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
++ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
++ LPHANDLE lpNameHandle);
++
++#define FreeAddrInfoEx __AW_SUFFIXED__(FreeAddrInfoEx)
++WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExA(PADDRINFOEXA pAddrInfo);
++WINSOCK_API_LINKAGE void WSAAPI FreeAddrInfoExW(PADDRINFOEXW pAddrInfo);
++
++#if INCL_WINSOCK_API_TYPEDEFS
++#define LPFN_GETADDRINFOEX __AW_SUFFIXED__(LPFN_GETADDRINFOEX)
++ typedef int (WSAAPI *LPFN_GETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, DWORD dwNameSpace,
++ LPGUID lpNspId,const ADDRINFOEXA *pHints,PADDRINFOEXA *ppResult,
++ PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
++ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
++ LPHANDLE lpNameHandle);
++ typedef int (WSAAPI *LPFN_GETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,DWORD dwNameSpace,
++ LPGUID lpNspId,const ADDRINFOEXW *pHints,PADDRINFOEXW *ppResult,
++ PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
++ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
++ LPHANDLE lpNameHandle);
++
++#define LPFN_SETADDRINFOEX __AW_SUFFIXED__(LPFN_SETADDRINFOEX)
++ typedef int (WSAAPI *LPFN_SETADDRINFOEXA)(PCSTR pName, PCSTR pServiceName, SOCKET_ADDRESS *pAddresses,
++ DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
++ LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
++ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
++ LPHANDLE lpNameHandle);
++ typedef int (WSAAPI *LPFN_SETADDRINFOEXW)(PCWSTR pName,PCWSTR pServiceName,SOCKET_ADDRESS *pAddresses,
++ DWORD dwAddressCount,LPBLOB lpBlob,DWORD dwFlags,DWORD dwNameSpace,
++ LPGUID lpNspId,PTIMEVAL timeout,LPOVERLAPPED lpOverlapped,
++ LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine,
++ LPHANDLE lpNameHandle);
++
++#define LPFN_FREEADDRINFOEX __AW_SUFFIXED__(LPFN_FREEADDRINFOEX)
++ typedef void (WSAAPI *LPFN_FREEADDRINFOEXA)(PADDRINFOEXA pAddrInfo);
++ typedef void (WSAAPI *LPFN_FREEADDRINFOEXW)(PADDRINFOEXW pAddrInfo);
++#endif /* INCL_WINSOCK_API_TYPEDEFS */
++
++
++WINSOCK_API_LINKAGE int WSAAPI WSAImpersonateSocketPeer(
++ SOCKET Socket,
++ const struct sockaddr *PeerAddress,
++ ULONG peerAddressLen
++);
++
++/* SOCKET_SECURITY_* not defined
++WINSOCK_API_LINKAGE int WSAAPI WSAQuerySocketSecurity(
++ SOCKET Socket,
++ const SOCKET_SECURITY_QUERY_TEMPLATE *SecurityQueryTemplate,
++ ULONG SecurityQueryTemplateLen,
++ SOCKET_SECURITY_QUERY_INFO *SecurityQueryInfo,
++ ULONG *SecurityQueryInfoLen,
++ LPWSAOVERLAPPED Overlapped,
++ LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
++);
++
++WINSOCK_API_LINKAGE int WSAAPI WSARevertImpersonation(void);
++
++WINSOCK_API_LINKAGE int WSAAPI WSASetSocketPeerTargetName(
++ SOCKET Socket,
++ const SOCKET_PEER_TARGET_NAME *PeerTargetName,
++ ULONG PeerTargetNameLen,
++ LPWSAOVERLAPPED Overlapped,
++ LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
++);
++
++WINSOCK_API_LINKAGE int WSAAPI WSASetSocketSecurity(
++ SOCKET Socket,
++ const SOCKET_SECURITY_SETTINGS *SecuritySettings,
++ ULONG SecuritySettingsLen,
++ LPWSAOVERLAPPED Overlapped,
++ LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine
++);
++ */
++
++#define InetNtopA inet_ntop
++
++WINSOCK_API_LINKAGE LPCWSTR WSAAPI InetNtopW(INT Family, PVOID pAddr, LPWSTR pStringBuf, size_t StringBufSIze);
++WINSOCK_API_LINKAGE LPCSTR WSAAPI InetNtopA(INT Family, PVOID pAddr, LPSTR pStringBuf, size_t StringBufSize);
++
++#define InetNtop __AW_SUFFIXED__(InetNtop)
++
++#define InetPtonA inet_pton
++
++WINSOCK_API_LINKAGE INT WSAAPI InetPtonW(INT Family, LPCWSTR pStringBuf, PVOID pAddr);
++WINSOCK_API_LINKAGE INT WSAAPI InetPtonA(INT Family, LPCSTR pStringBuf, PVOID pAddr);
++
++#define InetPton __AW_SUFFIXED__(InetPton)
++
++#endif /* Vista */
++
+ #ifdef __cplusplus
+ }
+ #endif
+--- w32api-5.0.2/include/ifdef.h.orig 1970-01-01 01:00:00.000000000 +0100
++++ w32api-5.0.2/include/ifdef.h 2018-09-18 18:11:18.793218987 +0200
+@@ -0,0 +1,118 @@
++/* https://github.com/Alexpux/mingw-w64/raw/master/mingw-w64-headers/include/ifdef.h
++ with IF_OPER_STATUS definition (already defined in mingw32 iptypes.h) replaced by iptypes.h include */
++/**
++ * This file has no copyright assigned and is placed in the Public Domain.
++ * This file is part of the mingw-w64 runtime package.
++ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
++ */
++#ifndef _INC_IFDEF
++#define _INC_IFDEF
++
++#include <ipifcons.h>
++#include <iptypes.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++#define IF_MAX_STRING_SIZE 256
++#define IF_MAX_PHYS_ADDRESS_LENGTH 32
++
++typedef UINT32 NET_IF_COMPARTMENT_ID, *PNET_IF_COMPARTMENT_ID;
++
++typedef ULONG NET_IFINDEX, *PNET_IFINDEX;
++typedef UINT16 NET_IFTYPE, *PNET_IFTYPE;
++typedef NET_IFINDEX IF_INDEX, *PIF_INDEX;
++
++typedef GUID NET_IF_NETWORK_GUID;
++
++typedef enum _NET_IF_OPER_STATUS {
++ NET_IF_OPER_STATUS_UP = 1,
++ NET_IF_OPER_STATUS_DOWN,
++ NET_IF_OPER_STATUS_TESTING,
++ NET_IF_OPER_STATUS_UNKNOWN,
++ NET_IF_OPER_STATUS_DORMANT,
++ NET_IF_OPER_STATUS_NOT_PRESENT,
++ NET_IF_OPER_STATUS_LOWER_LAYER_DOWN
++} NET_IF_OPER_STATUS, *PNET_IF_OPER_STATUS;
++
++typedef enum _NET_IF_ADMIN_STATUS {
++ NET_IF_ADMIN_STATUS_UP = 1,
++ NET_IF_ADMIN_STATUS_DOWN,
++ NET_IF_ADMIN_STATUS_TESTING
++} NET_IF_ADMIN_STATUS, *PNET_IF_ADMIN_STATUS;
++
++typedef enum _NET_IF_MEDIA_CONNECT_STATE {
++ MediaConnectStateUnknown,
++ MediaConnectStateConnected,
++ MediaConnectStateDisconnected
++} NET_IF_MEDIA_CONNECT_STATE, *PNET_IF_MEDIA_CONNECT_STATE;
++
++typedef enum _NET_IF_ACCESS_TYPE {
++ NET_IF_ACCESS_LOOPBACK = 1,
++ NET_IF_ACCESS_BROADCAST,
++ NET_IF_ACCESS_POINT_TO_POINT,
++ NET_IF_ACCESS_POINT_TO_MULTI_POINT,
++ NET_IF_ACCESS_MAXIMUM
++} NET_IF_ACCESS_TYPE, *PNET_IF_ACCESS_TYPE;
++
++typedef enum _NET_IF_CONNECTION_TYPE {
++ NET_IF_CONNECTION_DEDICATED = 1,
++ NET_IF_CONNECTION_PASSIVE,
++ NET_IF_CONNECTION_DEMAND,
++ NET_IF_CONNECTION_MAXIMUM
++} NET_IF_CONNECTION_TYPE, *PNET_IF_CONNECTION_TYPE;
++
++typedef enum _NET_IF_DIRECTION_TYPE {
++ NET_IF_DIRECTION_SENDRECEIVE,
++ NET_IF_DIRECTION_SENDONLY,
++ NET_IF_DIRECTION_RECEIVEONLY,
++ NET_IF_DIRECTION_MAXIMUM
++} NET_IF_DIRECTION_TYPE, *PNET_IF_DIRECTION_TYPE;
++
++typedef enum _NET_IF_MEDIA_DUPLEX_STATE {
++ MediaDuplexStateUnknown,
++ MediaDuplexStateHalf,
++ MediaDuplexStateFull
++} NET_IF_MEDIA_DUPLEX_STATE, *PNET_IF_MEDIA_DUPLEX_STATE;
++
++typedef enum _TUNNEL_TYPE {
++ TUNNEL_TYPE_NONE = 0,
++ TUNNEL_TYPE_OTHER = 1,
++ TUNNEL_TYPE_DIRECT = 2,
++ TUNNEL_TYPE_6TO4 = 11,
++ TUNNEL_TYPE_ISATAP = 13,
++ TUNNEL_TYPE_TEREDO = 14,
++ TUNNEL_TYPE_IPHTTPS = 15
++} TUNNEL_TYPE, *PTUNNEL_TYPE;
++
++typedef union _NET_LUID {
++ ULONG64 Value;
++ _ANONYMOUS_STRUCT struct { /* bitfield with 64 bit types. */
++ ULONG64 Reserved :24;
++ ULONG64 NetLuidIndex :24;
++ ULONG64 IfType :16;
++ } Info;
++} NET_LUID, *PNET_LUID;
++
++typedef NET_LUID IF_LUID, *PIF_LUID;
++
++typedef struct _IF_COUNTED_STRING_LH {
++ USHORT Length;
++ WCHAR String[IF_MAX_STRING_SIZE + 1];
++} IF_COUNTED_STRING_LH, *PIF_COUNTED_STRING_LH;
++typedef IF_COUNTED_STRING_LH IF_COUNTED_STRING;
++typedef IF_COUNTED_STRING *PIF_COUNTED_STRING;
++
++typedef struct _IF_PHYSICAL_ADDRESS_LH {
++ USHORT Length;
++ UCHAR Address[IF_MAX_PHYS_ADDRESS_LENGTH];
++} IF_PHYSICAL_ADDRESS_LH, *PIF_PHYSICAL_ADDRESS_LH;
++typedef IF_PHYSICAL_ADDRESS_LH IF_PHYSICAL_ADDRESS;
++typedef IF_PHYSICAL_ADDRESS *PIF_PHYSICAL_ADDRESS;
++
++#ifdef __cplusplus
++}
++#endif
++
++#endif /* _INC_IFDEF */
+--- w32api-5.0.2/include/iphlpapi.h.orig 2017-11-28 19:03:04.000000000 +0100
++++ w32api-5.0.2/include/iphlpapi.h 2018-09-18 17:20:54.629920182 +0200
+@@ -7,6 +7,8 @@
+ #include <iprtrmib.h>
+ #include <ipexport.h>
+ #include <iptypes.h>
++#include <ifdef.h>
++
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+@@ -71,6 +73,10 @@
+ DWORD WINAPI SetTcpEntry(PMIB_TCPROW);
+ DWORD WINAPI UnenableRouter(OVERLAPPED*, LPDWORD);
+
++#if NTDDI_VERSION >= __NTDDI_VISTA
++#include <netioapi.h>
++#endif
++
+ #ifdef __cplusplus
+ }
+ #endif
+--- w32api-5.0.2/include/winreg.h.orig 2017-11-28 19:03:04.000000000 +0100
++++ w32api-5.0.2/include/winreg.h 2018-09-18 20:52:03.946442081 +0200
+@@ -18,6 +18,9 @@
+ #define HKEY_PERFORMANCE_DATA ((HKEY)0x80000004)
+ #define HKEY_CURRENT_CONFIG ((HKEY)0x80000005)
+ #define HKEY_DYN_DATA ((HKEY)0x80000006)
++#define HKEY_PERFORMANCE_TEXT ((HKEY)0x80000050)
++#define HKEY_PERFORMANCE_NLSTEXT ((HKEY)0x80000060)
++
+ #define REG_OPTION_VOLATILE 1
+ #define REG_OPTION_NON_VOLATILE 0
+ #define REG_CREATED_NEW_KEY 1
+--- w32api-5.0.2/include/nldef.h.orig 1970-01-01 01:00:00.000000000 +0100
++++ w32api-5.0.2/include/nldef.h 2018-09-19 20:48:36.358791357 +0200
+@@ -0,0 +1,193 @@
++/* https://github.com/Alexpux/mingw-w64/raw/master/mingw-w64-headers/include/nldef.h */
++/**
++ * This file is part of the mingw-w64 runtime package.
++ * No warranty is given; refer to the file DISCLAIMER within this package.
++ */
++
++#ifndef _NLDEF_
++#define _NLDEF_
++
++#include <iptypes.h>
++/*
++#include <winapifamily.h>
++
++#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) || _WIN32_WINNT >= 0x0A00
++ */
++
++typedef enum {
++ NldsInvalid,
++ NldsTentative,
++ NldsDuplicate,
++ NldsDeprecated,
++ NldsPreferred,
++/*IpDadStateInvalid = 0,
++ IpDadStateTentative,
++ IpDadStateDuplicate,
++ IpDadStateDeprecated,
++ IpDadStatePreferred, */
++} NL_DAD_STATE;
++
++#define MAKE_ROUTE_PROTOCOL(N, V) MIB_IPPROTO_ ## N = V, PROTO_IP_ ## N = V
++
++typedef enum {
++ RouteProtocolOther = 1,
++ RouteProtocolLocal = 2,
++ RouteProtocolNetMgmt = 3,
++ RouteProtocolIcmp = 4,
++ RouteProtocolEgp = 5,
++ RouteProtocolGgp = 6,
++ RouteProtocolHello = 7,
++ RouteProtocolRip = 8,
++ RouteProtocolIsIs = 9,
++ RouteProtocolEsIs = 10,
++ RouteProtocolCisco = 11,
++ RouteProtocolBbn = 12,
++ RouteProtocolOspf = 13,
++ RouteProtocolBgp = 14,
++
++ MAKE_ROUTE_PROTOCOL (OTHER, 1),
++ MAKE_ROUTE_PROTOCOL (LOCAL, 2),
++ MAKE_ROUTE_PROTOCOL (NETMGMT, 3),
++ MAKE_ROUTE_PROTOCOL (ICMP, 4),
++ MAKE_ROUTE_PROTOCOL (EGP, 5),
++ MAKE_ROUTE_PROTOCOL (GGP, 6),
++ MAKE_ROUTE_PROTOCOL (HELLO, 7),
++ MAKE_ROUTE_PROTOCOL (RIP, 8),
++ MAKE_ROUTE_PROTOCOL (IS_IS, 9),
++ MAKE_ROUTE_PROTOCOL (ES_IS, 10),
++ MAKE_ROUTE_PROTOCOL (CISCO, 11),
++ MAKE_ROUTE_PROTOCOL (BBN, 12),
++ MAKE_ROUTE_PROTOCOL (OSPF, 13),
++ MAKE_ROUTE_PROTOCOL (BGP, 14),
++ MAKE_ROUTE_PROTOCOL (NT_AUTOSTATIC, 10002),
++ MAKE_ROUTE_PROTOCOL (NT_STATIC, 10006),
++ MAKE_ROUTE_PROTOCOL (NT_STATIC_NON_DOD, 10007)
++} NL_ROUTE_PROTOCOL,*PNL_ROUTE_PROTOCOL;
++
++typedef IP_PREFIX_ORIGIN /* enum {
++ IpPrefixOriginOther = 0,
++ IpPrefixOriginManual,
++ IpPrefixOriginWellKnown,
++ IpPrefixOriginDhcp,
++ IpPrefixOriginRouterAdvertisement,
++ IpPrefixOriginUnchanged = 16
++}*/ NL_PREFIX_ORIGIN;
++
++typedef enum {
++ NlsoOther = 0,
++ NlsoManual,
++ NlsoWellKnown,
++ NlsoDhcp,
++ NlsoLinkLayerAddress,
++ NlsoRandom,
++/*IpSuffixOriginOther = 0,
++ IpSuffixOriginManual,
++ IpSuffixOriginWellKnown,
++ IpSuffixOriginDhcp,
++ IpSuffixOriginLinkLayerAddress,
++ IpSuffixOriginRandom,
++ IpSuffixOriginUnchanged = 16*/
++} NL_SUFFIX_ORIGIN;
++
++typedef enum {
++ NlatUnspecified,
++ NlatUnicast,
++ NlatAnycast,
++ NlatMulticast,
++ NlatBroadcast,
++ NlatInvalid
++} NL_ADDRESS_TYPE, *PNL_ADDRESS_TYPE;
++
++typedef enum _NL_ROUTE_ORIGIN {
++ NlroManual,
++ NlroWellKnown,
++ NlroDHCP,
++ NlroRouterAdvertisement,
++ Nlro6to4,
++} NL_ROUTE_ORIGIN, *PNL_ROUTE_ORIGIN;
++
++typedef enum _NL_NEIGHBOR_STATE {
++ NlnsUnreachable,
++ NlnsIncomplete,
++ NlnsProbe,
++ NlnsDelay,
++ NlnsStale,
++ NlnsReachable,
++ NlnsPermanent,
++ NlnsMaximum,
++} NL_NEIGHBOR_STATE, *PNL_NEIGHBOR_STATE;
++
++typedef enum _NL_LINK_LOCAL_ADDRESS_BEHAVIOR {
++ LinkLocalAlwaysOff = 0,
++ LinkLocalDelayed,
++ LinkLocalAlwaysOn,
++ LinkLocalUnchanged = -1
++} NL_LINK_LOCAL_ADDRESS_BEHAVIOR;
++
++typedef enum _NL_ROUTER_DISCOVERY_BEHAVIOR {
++ RouterDiscoveryDisabled = 0,
++ RouterDiscoveryEnabled,
++ RouterDiscoveryDhcp,
++ RouterDiscoveryUnchanged = -1
++} NL_ROUTER_DISCOVERY_BEHAVIOR;
++
++typedef enum _NL_BANDWIDTH_FLAG {
++ NlbwDisabled = 0,
++ NlbwEnabled,
++ NlbwUnchanged = -1
++} NL_BANDWIDTH_FLAG, *PNL_BANDWIDTH_FLAG;
++
++typedef enum _NL_INTERFACE_NETWORK_CATEGORY_STATE {
++ NlincCategoryUnknown = 0,
++ NlincPublic = 1,
++ NlincPrivate = 2,
++ NlincDomainAuthenticated = 3,
++ NlincCategoryStateMax
++} NL_INTERFACE_NETWORK_CATEGORY_STATE, *PNL_INTERFACE_NETWORK_CATEGORY_STATE;
++
++typedef struct _NL_INTERFACE_OFFLOAD_ROD {
++ BOOLEAN NlChecksumSupported : 1;
++ BOOLEAN NlOptionsSupported : 1;
++ BOOLEAN TlDatagramChecksumSupported : 1;
++ BOOLEAN TlStreamChecksumSupported : 1;
++ BOOLEAN TlStreamOptionsSupported : 1;
++ BOOLEAN FastPathCompatible : 1;
++ BOOLEAN TlLargeSendOffloadSupported : 1;
++ BOOLEAN TlGiantSendOffloadSupported : 1;
++} NL_INTERFACE_OFFLOAD_ROD, *PNL_INTERFACE_OFFLOAD_ROD;
++
++typedef struct _NL_PATH_BANDWIDTH_ROD {
++ ULONG64 Bandwidth;
++ ULONG64 Instability;
++ BOOLEAN BandwidthPeaked;
++} NL_PATH_BANDWIDTH_ROD, *PNL_PATH_BANDWIDTH_ROD;
++
++typedef enum _NL_NETWORK_CATEGORY {
++ NetworkCategoryPublic,
++ NetworkCategoryPrivate,
++ NetworkCategoryDomainAuthenticated,
++ NetworkCategoryUnchanged = -1,
++ NetworkCategoryUnknown = -1
++} NL_NETWORK_CATEGORY,*PNL_NETWORK_CATEGORY;
++
++typedef struct _NL_BANDWIDTH_INFORMATION {
++ ULONG64 Bandwidth;
++ ULONG64 Instability;
++ BOOLEAN BandwidthPeaked;
++} NL_BANDWIDTH_INFORMATION, *PNL_BANDWIDTH_INFORMATION;
++
++#define NlpoOther IpPrefixOriginOther
++#define NlpoManual IpPrefixOriginManual
++#define NlpoWellKnown IpPrefixOriginWellKnown
++#define NlpoDhcp IpPrefixOriginDhcp
++#define NlpoRouterAdvertisement IpPrefixOriginRouterAdvertisement
++
++#define NL_MAX_METRIC_COMPONENT ((((ULONG) 1) << 31) - 1)
++
++#define NET_IF_CURRENT_SESSION ((ULONG)-1)
++
++/*
++#endif
++ */
++
++#endif
+--- w32api-5.0.2/include/netioapi.h.orig 1970-01-01 01:00:00.000000000 +0100
++++ w32api-5.0.2/include/netioapi.h 2018-09-19 20:50:20.355456840 +0200
+@@ -0,0 +1,398 @@
++/* https://github.com/Alexpux/mingw-w64/raw/master/mingw-w64-headers/include/netioapi.h, adjusted for mingw32 */
++/**
++ * This file is part of the mingw-w64 runtime package.
++ * No warranty is given; refer to the file DISCLAIMER within this pack
++ */
++
++#ifndef _NETIOAPI_H_
++#define _NETIOAPI_H_
++
++/*
++#include <winapifamily.h>
++
++#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
++ */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++#ifndef ANY_SIZE
++#define ANY_SIZE 1
++#endif
++
++#ifdef _IPHLPAPI_H
++#define NETIO_STATUS DWORD
++#define NETIO_SUCCESS(x) ((x) == NO_ERROR)
++#define NETIOAPI_API_ WINAPI
++#else
++#ifndef __MINGW32__
++#include <ws2def.h>
++#ifndef __CYGWIN__
++#include <ws2ipdef.h>
++#endif
++#endif
++#include <iprtrmib.h>
++#include <ifdef.h>
++#include <nldef.h>
++#include <ntdef.h> /* for NTSTATUS */
++
++#define NETIO_STATUS NTSTATUS
++#define NETIO_SUCCESS(x) NT_SUCCESS (x)
++#define NETIOAPI_API_ NTAPI
++#endif
++
++#define _NETIOAPI_SUCCESS_
++#define NETIOAPI_API NETIO_STATUS NETIOAPI_API_
++
++#define IF_NAMESIZE NDIS_IF_MAX_STRING_SIZE
++
++ typedef enum _MIB_NOTIFICATION_TYPE {
++ MibParameterNotification,
++ MibAddInstance,
++ MibDeleteInstance,
++ MibInitialNotification
++ } MIB_NOTIFICATION_TYPE,*PMIB_NOTIFICATION_TYPE;
++
++#ifdef _NLDEF_ /* _WS2IPDEF_ */
++#include <ntddndis.h>
++
++#define MIB_INVALID_TEREDO_PORT_NUMBER 0
++
++ typedef enum _MIB_IF_TABLE_LEVEL {
++ MibIfTableNormal,
++ MibIfTableRaw
++ } MIB_IF_TABLE_LEVEL, *PMIB_IF_TABLE_LEVEL;
++
++ typedef struct _MIB_IF_ROW2 {
++ NET_LUID InterfaceLuid;
++ NET_IFINDEX InterfaceIndex;
++ GUID InterfaceGuid;
++ WCHAR Alias[IF_MAX_STRING_SIZE + 1];
++ WCHAR Description[IF_MAX_STRING_SIZE + 1];
++ ULONG PhysicalAddressLength;
++ UCHAR PhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
++ UCHAR PermanentPhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
++ ULONG Mtu;
++ IFTYPE Type;
++ TUNNEL_TYPE TunnelType;
++ NDIS_MEDIUM MediaType;
++ NDIS_PHYSICAL_MEDIUM PhysicalMediumType;
++ NET_IF_ACCESS_TYPE AccessType;
++ NET_IF_DIRECTION_TYPE DirectionType;
++ struct {
++ BOOLEAN HardwareInterface : 1;
++ BOOLEAN FilterInterface : 1;
++ BOOLEAN ConnectorPresent : 1;
++ BOOLEAN NotAuthenticated : 1;
++ BOOLEAN NotMediaConnected : 1;
++ BOOLEAN Paused : 1;
++ BOOLEAN LowPower : 1;
++ BOOLEAN EndPointInterface : 1;
++ } InterfaceAndOperStatusFlags;
++ IF_OPER_STATUS OperStatus;
++ NET_IF_ADMIN_STATUS AdminStatus;
++ NET_IF_MEDIA_CONNECT_STATE MediaConnectState;
++ NET_IF_NETWORK_GUID NetworkGuid;
++ NET_IF_CONNECTION_TYPE ConnectionType;
++ ULONG64 TransmitLinkSpeed;
++ ULONG64 ReceiveLinkSpeed;
++ ULONG64 InOctets;
++ ULONG64 InUcastPkts;
++ ULONG64 InNUcastPkts;
++ ULONG64 InDiscards;
++ ULONG64 InErrors;
++ ULONG64 InUnknownProtos;
++ ULONG64 InUcastOctets;
++ ULONG64 InMulticastOctets;
++ ULONG64 InBroadcastOctets;
++ ULONG64 OutOctets;
++ ULONG64 OutUcastPkts;
++ ULONG64 OutNUcastPkts;
++ ULONG64 OutDiscards;
++ ULONG64 OutErrors;
++ ULONG64 OutUcastOctets;
++ ULONG64 OutMulticastOctets;
++ ULONG64 OutBroadcastOctets;
++ ULONG64 OutQLen;
++ } MIB_IF_ROW2,*PMIB_IF_ROW2;
++
++ typedef struct _MIB_IF_TABLE2 {
++ ULONG NumEntries;
++ MIB_IF_ROW2 Table[ANY_SIZE];
++ } MIB_IF_TABLE2, *PMIB_IF_TABLE2;
++
++ typedef struct _MIB_IPINTERFACE_ROW {
++ ADDRESS_FAMILY Family;
++ NET_LUID InterfaceLuid;
++ NET_IFINDEX InterfaceIndex;
++ ULONG MaxReassemblySize;
++ ULONG64 InterfaceIdentifier;
++ ULONG MinRouterAdvertisementInterval;
++ ULONG MaxRouterAdvertisementInterval;
++ BOOLEAN AdvertisingEnabled;
++ BOOLEAN ForwardingEnabled;
++ BOOLEAN WeakHostSend;
++ BOOLEAN WeakHostReceive;
++ BOOLEAN UseAutomaticMetric;
++ BOOLEAN UseNeighborUnreachabilityDetection;
++ BOOLEAN ManagedAddressConfigurationSupported;
++ BOOLEAN OtherStatefulConfigurationSupported;
++ BOOLEAN AdvertiseDefaultRoute;
++ NL_ROUTER_DISCOVERY_BEHAVIOR RouterDiscoveryBehavior;
++ ULONG DadTransmits;
++ ULONG BaseReachableTime;
++ ULONG RetransmitTime;
++ ULONG PathMtuDiscoveryTimeout;
++ NL_LINK_LOCAL_ADDRESS_BEHAVIOR LinkLocalAddressBehavior;
++ ULONG LinkLocalAddressTimeout;
++ ULONG ZoneIndices[ScopeLevelCount];
++ ULONG SitePrefixLength;
++ ULONG Metric;
++ ULONG NlMtu;
++ BOOLEAN Connected;
++ BOOLEAN SupportsWakeUpPatterns;
++ BOOLEAN SupportsNeighborDiscovery;
++ BOOLEAN SupportsRouterDiscovery;
++ ULONG ReachableTime;
++ NL_INTERFACE_OFFLOAD_ROD TransmitOffload;
++ NL_INTERFACE_OFFLOAD_ROD ReceiveOffload;
++ BOOLEAN DisableDefaultRoutes;
++ } MIB_IPINTERFACE_ROW,*PMIB_IPINTERFACE_ROW;
++
++ typedef struct _MIB_IPINTERFACE_TABLE {
++ ULONG NumEntries;
++ MIB_IPINTERFACE_ROW Table[ANY_SIZE];
++ } MIB_IPINTERFACE_TABLE,*PMIB_IPINTERFACE_TABLE;
++
++ typedef struct _MIB_IFSTACK_ROW {
++ NET_IFINDEX HigherLayerInterfaceIndex;
++ NET_IFINDEX LowerLayerInterfaceIndex;
++ } MIB_IFSTACK_ROW,*PMIB_IFSTACK_ROW;
++
++ typedef struct _MIB_INVERTEDIFSTACK_ROW {
++ NET_IFINDEX LowerLayerInterfaceIndex;
++ NET_IFINDEX HigherLayerInterfaceIndex;
++ } MIB_INVERTEDIFSTACK_ROW,*PMIB_INVERTEDIFSTACK_ROW;
++
++ typedef struct _MIB_IFSTACK_TABLE {
++ ULONG NumEntries;
++ MIB_IFSTACK_ROW Table[ANY_SIZE];
++ } MIB_IFSTACK_TABLE,*PMIB_IFSTACK_TABLE;
++
++ typedef struct _MIB_INVERTEDIFSTACK_TABLE {
++ ULONG NumEntries;
++ MIB_INVERTEDIFSTACK_ROW Table[ANY_SIZE];
++ } MIB_INVERTEDIFSTACK_TABLE,*PMIB_INVERTEDIFSTACK_TABLE;
++
++ typedef struct _MIB_IP_NETWORK_CONNECTION_BANDWIDTH_ESTIMATES {
++ NL_BANDWIDTH_INFORMATION InboundBandwidthInformation;
++ NL_BANDWIDTH_INFORMATION OutboundBandwidthInformation;
++ } MIB_IP_NETWORK_CONNECTION_BANDWIDTH_ESTIMATES, *PMIB_IP_NETWORK_CONNECTION_BANDWIDTH_ESTIMATES;
++
++ typedef struct _MIB_UNICASTIPADDRESS_ROW {
++ SOCKADDR_INET Address;
++ NET_LUID InterfaceLuid;
++ NET_IFINDEX InterfaceIndex;
++ NL_PREFIX_ORIGIN PrefixOrigin;
++ NL_SUFFIX_ORIGIN SuffixOrigin;
++ ULONG ValidLifetime;
++ ULONG PreferredLifetime;
++ UINT8 OnLinkPrefixLength;
++ BOOLEAN SkipAsSource;
++ NL_DAD_STATE DadState;
++ SCOPE_ID ScopeId;
++ LARGE_INTEGER CreationTimeStamp;
++ } MIB_UNICASTIPADDRESS_ROW,*PMIB_UNICASTIPADDRESS_ROW;
++
++ typedef struct _MIB_UNICASTIPADDRESS_TABLE {
++ ULONG NumEntries;
++ MIB_UNICASTIPADDRESS_ROW Table[ANY_SIZE];
++ } MIB_UNICASTIPADDRESS_TABLE,*PMIB_UNICASTIPADDRESS_TABLE;
++
++ typedef struct _MIB_ANYCASTIPADDRESS_ROW {
++ SOCKADDR_INET Address;
++ NET_LUID InterfaceLuid;
++ NET_IFINDEX InterfaceIndex;
++ SCOPE_ID ScopeId;
++ } MIB_ANYCASTIPADDRESS_ROW,*PMIB_ANYCASTIPADDRESS_ROW;
++
++ typedef struct _MIB_ANYCASTIPADDRESS_TABLE {
++ ULONG NumEntries;
++ MIB_ANYCASTIPADDRESS_ROW Table[ANY_SIZE];
++ } MIB_ANYCASTIPADDRESS_TABLE,*PMIB_ANYCASTIPADDRESS_TABLE;
++
++ typedef struct _MIB_MULTICASTIPADDRESS_ROW {
++ SOCKADDR_INET Address;
++ NET_IFINDEX InterfaceIndex;
++ NET_LUID InterfaceLuid;
++ SCOPE_ID ScopeId;
++ } MIB_MULTICASTIPADDRESS_ROW,*PMIB_MULTICASTIPADDRESS_ROW;
++
++ typedef struct _MIB_MULTICASTIPADDRESS_TABLE {
++ ULONG NumEntries;
++ MIB_MULTICASTIPADDRESS_ROW Table[ANY_SIZE];
++ } MIB_MULTICASTIPADDRESS_TABLE,*PMIB_MULTICASTIPADDRESS_TABLE;
++
++ typedef struct _IP_ADDRESS_PREFIX {
++ SOCKADDR_INET Prefix;
++ UINT8 PrefixLength;
++ } IP_ADDRESS_PREFIX,*PIP_ADDRESS_PREFIX;
++
++ typedef struct _MIB_IPFORWARD_ROW2 {
++ NET_LUID InterfaceLuid;
++ NET_IFINDEX InterfaceIndex;
++ IP_ADDRESS_PREFIX DestinationPrefix;
++ SOCKADDR_INET NextHop;
++ UCHAR SitePrefixLength;
++ ULONG ValidLifetime;
++ ULONG PreferredLifetime;
++ ULONG Metric;
++ NL_ROUTE_PROTOCOL Protocol;
++ BOOLEAN Loopback;
++ BOOLEAN AutoconfigureAddress;
++ BOOLEAN Publish;
++ BOOLEAN Immortal;
++ ULONG Age;
++ NL_ROUTE_ORIGIN Origin;
++ } MIB_IPFORWARD_ROW2,*PMIB_IPFORWARD_ROW2;
++
++ typedef struct _MIB_IPFORWARD_TABLE2 {
++ ULONG NumEntries;
++ MIB_IPFORWARD_ROW2 Table[ANY_SIZE];
++ } MIB_IPFORWARD_TABLE2,*PMIB_IPFORWARD_TABLE2;
++
++ typedef struct _MIB_IPPATH_ROW {
++ SOCKADDR_INET Source;
++ SOCKADDR_INET Destination;
++ NET_LUID InterfaceLuid;
++ NET_IFINDEX InterfaceIndex;
++ SOCKADDR_INET CurrentNextHop;
++ ULONG PathMtu;
++ ULONG RttMean;
++ ULONG RttDeviation;
++ _ANONYMOUS_UNION union {
++ ULONG LastReachable;
++ ULONG LastUnreachable;
++ };
++ BOOLEAN IsReachable;
++ ULONG64 LinkTransmitSpeed;
++ ULONG64 LinkReceiveSpeed;
++ } MIB_IPPATH_ROW,*PMIB_IPPATH_ROW;
++
++ typedef struct _MIB_IPPATH_TABLE {
++ ULONG NumEntries;
++ MIB_IPPATH_ROW Table[ANY_SIZE];
++ } MIB_IPPATH_TABLE,*PMIB_IPPATH_TABLE;
++
++ typedef struct _MIB_IPNET_ROW2 {
++ SOCKADDR_INET Address;
++ NET_IFINDEX InterfaceIndex;
++ NET_LUID InterfaceLuid;
++ UCHAR PhysicalAddress[IF_MAX_PHYS_ADDRESS_LENGTH];
++ ULONG PhysicalAddressLength;
++ NL_NEIGHBOR_STATE State;
++ _ANONYMOUS_UNION union {
++ _ANONYMOUS_STRUCT struct {
++ BOOLEAN IsRouter : 1;
++ BOOLEAN IsUnreachable : 1;
++ };
++ UCHAR Flags;
++ };
++ union {
++ ULONG LastReachable;
++ ULONG LastUnreachable;
++ } ReachabilityTime;
++ } MIB_IPNET_ROW2, *PMIB_IPNET_ROW2;
++
++ typedef struct _MIB_IPNET_TABLE2 {
++ ULONG NumEntries;
++ MIB_IPNET_ROW2 Table[ANY_SIZE];
++ } MIB_IPNET_TABLE2, *PMIB_IPNET_TABLE2;
++
++ typedef VOID (NETIOAPI_API_ *PIPINTERFACE_CHANGE_CALLBACK) (PVOID CallerContext, PMIB_IPINTERFACE_ROW Row, MIB_NOTIFICATION_TYPE NotificationType);
++ typedef VOID (NETIOAPI_API_ *PUNICAST_IPADDRESS_CHANGE_CALLBACK) (PVOID CallerContext, PMIB_UNICASTIPADDRESS_ROW Row, MIB_NOTIFICATION_TYPE NotificationType);
++ typedef VOID (NETIOAPI_API_ *PSTABLE_UNICAST_IPADDRESS_TABLE_CALLBACK) (PVOID CallerContext, PMIB_UNICASTIPADDRESS_TABLE AddressTable);
++
++ typedef VOID (NETIOAPI_API_ *PTEREDO_PORT_CHANGE_CALLBACK) (PVOID CallerContext, USHORT Port, MIB_NOTIFICATION_TYPE NotificationType);
++ typedef VOID (NETIOAPI_API_ *PIPFORWARD_CHANGE_CALLBACK) (PVOID CallerContext, PMIB_IPFORWARD_ROW2 Row, MIB_NOTIFICATION_TYPE NotificationType);
++
++ NETIO_STATUS NETIOAPI_API_ GetIfEntry2 (PMIB_IF_ROW2 Row);
++ NETIO_STATUS NETIOAPI_API_ GetIfTable2 (PMIB_IF_TABLE2 *Table);
++ NETIO_STATUS NETIOAPI_API_ GetIfTable2Ex (MIB_IF_TABLE_LEVEL Level, PMIB_IF_TABLE2 *Table);
++ NETIO_STATUS NETIOAPI_API_ GetIfStackTable (PMIB_IFSTACK_TABLE *Table);
++ NETIO_STATUS NETIOAPI_API_ GetInvertedIfStackTable (PMIB_INVERTEDIFSTACK_TABLE *Table);
++ NETIO_STATUS NETIOAPI_API_ GetIpInterfaceEntry (PMIB_IPINTERFACE_ROW Row);
++ NETIO_STATUS NETIOAPI_API_ GetIpInterfaceTable (ADDRESS_FAMILY Family, PMIB_IPINTERFACE_TABLE *Table);
++ VOID NETIOAPI_API_ InitializeIpInterfaceEntry (PMIB_IPINTERFACE_ROW Row);
++ NETIO_STATUS NETIOAPI_API_ NotifyIpInterfaceChange (ADDRESS_FAMILY Family, PIPINTERFACE_CHANGE_CALLBACK Callback, PVOID CallerContext, BOOLEAN InitialNotification, HANDLE *NotificationHandle);
++ NETIO_STATUS NETIOAPI_API_ SetIpInterfaceEntry (PMIB_IPINTERFACE_ROW Row);
++ NETIO_STATUS NETIOAPI_API_ GetIpNetworkConnectionBandwidthEstimates (NET_IFINDEX InterfaceIndex, ADDRESS_FAMILY AddressFamily, PMIB_IP_NETWORK_CONNECTION_BANDWIDTH_ESTIMATES BandwidthEstimates);
++ NETIO_STATUS NETIOAPI_API_ CreateUnicastIpAddressEntry (CONST MIB_UNICASTIPADDRESS_ROW *Row);
++ NETIO_STATUS NETIOAPI_API_ DeleteUnicastIpAddressEntry (CONST MIB_UNICASTIPADDRESS_ROW *Row);
++ NETIO_STATUS NETIOAPI_API_ GetUnicastIpAddressEntry (PMIB_UNICASTIPADDRESS_ROW Row);
++ NETIO_STATUS NETIOAPI_API_ GetUnicastIpAddressTable (ADDRESS_FAMILY Family, PMIB_UNICASTIPADDRESS_TABLE *Table);
++ VOID NETIOAPI_API_ InitializeUnicastIpAddressEntry (PMIB_UNICASTIPADDRESS_ROW Row);
++ NETIO_STATUS NETIOAPI_API_ NotifyUnicastIpAddressChange (ADDRESS_FAMILY Family, PUNICAST_IPADDRESS_CHANGE_CALLBACK Callback, PVOID CallerContext, BOOLEAN InitialNotification, HANDLE *NotificationHandle);
++ NETIO_STATUS NETIOAPI_API_ CreateAnycastIpAddressEntry (CONST MIB_ANYCASTIPADDRESS_ROW *Row);
++ NETIO_STATUS NETIOAPI_API_ DeleteAnycastIpAddressEntry (CONST MIB_ANYCASTIPADDRESS_ROW *Row);
++ NETIO_STATUS NETIOAPI_API_ GetAnycastIpAddressEntry (PMIB_ANYCASTIPADDRESS_ROW Row);
++ NETIO_STATUS NETIOAPI_API_ GetAnycastIpAddressTable (ADDRESS_FAMILY Family, PMIB_ANYCASTIPADDRESS_TABLE *Table);
++ NETIO_STATUS NETIOAPI_API_ NotifyStableUnicastIpAddressTable (ADDRESS_FAMILY Family, PMIB_UNICASTIPADDRESS_TABLE *Table, PSTABLE_UNICAST_IPADDRESS_TABLE_CALLBACK CallerCallback, PVOID CallerContext, HANDLE *NotificationHandle);
++ NETIO_STATUS NETIOAPI_API_ SetUnicastIpAddressEntry (CONST MIB_UNICASTIPADDRESS_ROW *Row);
++ NETIO_STATUS NETIOAPI_API_ GetMulticastIpAddressEntry (PMIB_MULTICASTIPADDRESS_ROW Row);
++ NETIO_STATUS NETIOAPI_API_ GetMulticastIpAddressTable (ADDRESS_FAMILY Family, PMIB_MULTICASTIPADDRESS_TABLE *Table);
++ NETIO_STATUS NETIOAPI_API_ CreateIpForwardEntry2 (CONST MIB_IPFORWARD_ROW2 *Row);
++ NETIO_STATUS NETIOAPI_API_ DeleteIpForwardEntry2 (CONST MIB_IPFORWARD_ROW2 *Row);
++ NETIO_STATUS NETIOAPI_API_ GetBestRoute2 (NET_LUID *InterfaceLuid, NET_IFINDEX InterfaceIndex, CONST SOCKADDR_INET *SourceAddress, CONST SOCKADDR_INET *DestinationAddress, ULONG AddressSortOptions, PMIB_IPFORWARD_ROW2 BestRoute, SOCKADDR_INET *BestSourceAddress);
++ NETIO_STATUS NETIOAPI_API_ GetIpForwardEntry2 (PMIB_IPFORWARD_ROW2 Row);
++ NETIO_STATUS NETIOAPI_API_ GetIpForwardTable2 (ADDRESS_FAMILY Family, PMIB_IPFORWARD_TABLE2 *Table);
++ VOID NETIOAPI_API_ InitializeIpForwardEntry (PMIB_IPFORWARD_ROW2 Row);
++ NETIO_STATUS NETIOAPI_API_ NotifyRouteChange2 (ADDRESS_FAMILY AddressFamily, PIPFORWARD_CHANGE_CALLBACK Callback, PVOID CallerContext, BOOLEAN InitialNotification, HANDLE *NotificationHandle);
++ NETIO_STATUS NETIOAPI_API_ SetIpForwardEntry2 (CONST MIB_IPFORWARD_ROW2 *Route);
++ NETIO_STATUS NETIOAPI_API_ FlushIpPathTable (ADDRESS_FAMILY Family);
++ NETIO_STATUS NETIOAPI_API_ GetIpPathEntry (PMIB_IPPATH_ROW Row);
++ NETIO_STATUS NETIOAPI_API_ GetIpPathTable (ADDRESS_FAMILY Family, PMIB_IPPATH_TABLE *Table);
++ NETIO_STATUS NETIOAPI_API_ CreateIpNetEntry2 (CONST MIB_IPNET_ROW2 *Row);
++ NETIO_STATUS NETIOAPI_API_ DeleteIpNetEntry2 (CONST MIB_IPNET_ROW2 *Row);
++ NETIO_STATUS NETIOAPI_API_ FlushIpNetTable2 (ADDRESS_FAMILY Family, NET_IFINDEX InterfaceIndex);
++ NETIO_STATUS NETIOAPI_API_ GetIpNetEntry2 (PMIB_IPNET_ROW2 Row);
++ NETIO_STATUS NETIOAPI_API_ GetIpNetTable2 (ADDRESS_FAMILY Family, PMIB_IPNET_TABLE2 *Table);
++ NETIO_STATUS NETIOAPI_API_ ResolveIpNetEntry2 (PMIB_IPNET_ROW2 Row, CONST SOCKADDR_INET *SourceAddress);
++ NETIO_STATUS NETIOAPI_API_ SetIpNetEntry2 (PMIB_IPNET_ROW2 Row);
++ NETIO_STATUS NETIOAPI_API_ NotifyTeredoPortChange (PTEREDO_PORT_CHANGE_CALLBACK Callback, PVOID CallerContext, BOOLEAN InitialNotification, HANDLE *NotificationHandle);
++ NETIO_STATUS NETIOAPI_API_ GetTeredoPort (USHORT *Port);
++ NETIO_STATUS NETIOAPI_API_ CancelMibChangeNotify2 (HANDLE NotificationHandle);
++ VOID NETIOAPI_API_ FreeMibTable (PVOID Memory);
++ NETIO_STATUS NETIOAPI_API_ CreateSortedAddressPairs (const PSOCKADDR_IN6 SourceAddressList, ULONG SourceAddressCount, const PSOCKADDR_IN6 DestinationAddressList, ULONG DestinationAddressCount, ULONG AddressSortOptions, PSOCKADDR_IN6_PAIR *SortedAddressPairList, ULONG *SortedAddressPairCount);
++#endif
++
++ NETIO_STATUS NETIOAPI_API_ ConvertInterfaceNameToLuidA (CONST CHAR *InterfaceName, NET_LUID *InterfaceLuid);
++ NETIO_STATUS NETIOAPI_API_ ConvertInterfaceNameToLuidW (CONST WCHAR *InterfaceName, NET_LUID *InterfaceLuid);
++ NETIO_STATUS NETIOAPI_API_ ConvertInterfaceLuidToNameA (CONST NET_LUID *InterfaceLuid, PSTR InterfaceName, SIZE_T Length);
++ NETIO_STATUS NETIOAPI_API_ ConvertInterfaceLuidToNameW (CONST NET_LUID *InterfaceLuid, PWSTR InterfaceName, SIZE_T Length);
++ NETIO_STATUS NETIOAPI_API_ ConvertInterfaceLuidToIndex (CONST NET_LUID *InterfaceLuid, PNET_IFINDEX InterfaceIndex);
++ NETIO_STATUS NETIOAPI_API_ ConvertInterfaceIndexToLuid (NET_IFINDEX InterfaceIndex, PNET_LUID InterfaceLuid);
++ NETIO_STATUS NETIOAPI_API_ ConvertInterfaceLuidToAlias (CONST NET_LUID *InterfaceLuid, PWSTR InterfaceAlias, SIZE_T Length);
++ NETIO_STATUS NETIOAPI_API_ ConvertInterfaceAliasToLuid (CONST WCHAR *InterfaceAlias, PNET_LUID InterfaceLuid);
++ NETIO_STATUS NETIOAPI_API_ ConvertInterfaceLuidToGuid (CONST NET_LUID *InterfaceLuid, GUID *InterfaceGuid);
++ NETIO_STATUS NETIOAPI_API_ ConvertInterfaceGuidToLuid (CONST GUID *InterfaceGuid, PNET_LUID InterfaceLuid);
++ NET_IFINDEX NETIOAPI_API_ if_nametoindex (PCSTR InterfaceName);
++ PCHAR NETIOAPI_API_ if_indextoname (NET_IFINDEX InterfaceIndex, PCHAR InterfaceName);
++ NET_IF_COMPARTMENT_ID NETIOAPI_API_ GetCurrentThreadCompartmentId (VOID);
++ NETIO_STATUS NETIOAPI_API_ SetCurrentThreadCompartmentId (NET_IF_COMPARTMENT_ID CompartmentId);
++ NET_IF_COMPARTMENT_ID NETIOAPI_API_ GetSessionCompartmentId (ULONG SessionId);
++ NETIO_STATUS NETIOAPI_API_ SetSessionCompartmentId (ULONG SessionId, NET_IF_COMPARTMENT_ID CompartmentId);
++ NETIO_STATUS NETIOAPI_API_ GetNetworkInformation (CONST NET_IF_NETWORK_GUID *NetworkGuid, PNET_IF_COMPARTMENT_ID CompartmentId, PULONG SiteId, PWCHAR NetworkName, ULONG Length);
++ NETIO_STATUS NETIOAPI_API_ SetNetworkInformation (CONST NET_IF_NETWORK_GUID *NetworkGuid, NET_IF_COMPARTMENT_ID CompartmentId, CONST WCHAR *NetworkName);
++ NETIO_STATUS NETIOAPI_API_ ConvertLengthToIpv4Mask (ULONG MaskLength, PULONG Mask);
++ NETIO_STATUS NETIOAPI_API_ ConvertIpv4MaskToLength (ULONG Mask, PUINT8 MaskLength);
++
++#ifdef __cplusplus
++}
++#endif
++
++/*
++#endif
++ */
++#endif
+--- w32api-5.0.2/include/basetsd.h.orig 2017-11-09 02:35:48.000000000 +0100
++++ w32api-5.0.2/include/basetsd.h 2018-09-21 22:06:01.713431915 +0200
+@@ -47,14 +47,14 @@
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+-typedef signed char INT8;
+-typedef signed short INT16;
++typedef signed char INT8, *PINT8;
++typedef signed short INT16, *PINT16;
+ typedef int LONG32, *PLONG32;
+ #ifndef XFree86Server
+ typedef int INT32, *PINT32;
+ #endif /* ndef XFree86Server */
+-typedef unsigned char UINT8;
+-typedef unsigned short UINT16;
++typedef unsigned char UINT8, *PUINT8;
++typedef unsigned short UINT16, *PUINT16;
+ typedef unsigned int ULONG32, *PULONG32;
+ typedef unsigned int DWORD32, *PDWORD32;
+ typedef unsigned int UINT32, *PUINT32;
+--- w32api-5.0.2/include/ipifcons.h.orig 2017-11-09 02:35:48.000000000 +0100
++++ w32api-5.0.2/include/ipifcons.h 2018-09-22 08:35:34.133000622 +0200
+@@ -13,6 +13,12 @@
+ #pragma GCC system_header
+ #endif
+
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++typedef ULONG IFTYPE;
++
+ #define MIN_IF_TYPE 1
+ #define IF_TYPE_OTHER 1
+ #define IF_TYPE_REGULAR_1822 2
+@@ -196,4 +202,7 @@
+ #define MIB_IF_TYPE_LOOPBACK 24
+ #define MIB_IF_TYPE_SLIP 28
+
++#ifdef __cplusplus
++}
++#endif
+ #endif
+--- w32api-5.0.2/include/ntddndis.h.orig 1970-01-01 01:00:00.000000000 +0100
++++ w32api-5.0.2/include/ntddndis.h 2018-09-22 09:39:12.409623691 +0200
+@@ -0,0 +1,4589 @@
++/* https://github.com/Alexpux/mingw-w64/raw/master/mingw-w64-headers/include/ntddndis.h */
++/**
++* This file is part of the mingw-w64 runtime package.
++* No warranty is given; refer to the file DISCLAIMER within this package.
++*/
++
++#ifndef _NTDDNDIS_
++#define _NTDDNDIS_
++
++/*
++#include <winapifamily.h>
++
++#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
++ */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++#ifndef NDIS_SUPPORT_NDIS6
++#if defined (UM_NDIS60) || defined (UM_NDIS61) || defined (UM_NDIS620) || defined (UM_NDIS630)
++#define NDIS_SUPPORT_NDIS6 1
++#else
++#define NDIS_SUPPORT_NDIS6 0
++#endif
++#endif
++
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++#include <ifdef.h>
++/*
++#include <devpkey.h>
++#include <pciprop.h>
++ */
++#endif
++
++#ifndef NDIS_SUPPORT_NDIS61
++#if defined (UM_NDIS61) || defined (UM_NDIS620) || defined (UM_NDIS630)
++#define NDIS_SUPPORT_NDIS61 1
++#else
++#define NDIS_SUPPORT_NDIS61 0
++#endif
++#endif
++
++#ifndef NDIS_SUPPORT_NDIS620
++#if defined (UM_NDIS620) || defined (UM_NDIS630)
++#define NDIS_SUPPORT_NDIS620 1
++#else
++#define NDIS_SUPPORT_NDIS620 0
++#endif
++#endif
++
++#ifndef NDIS_SUPPORT_NDIS630
++#ifdef UM_NDIS630
++#define NDIS_SUPPORT_NDIS630 1
++#else
++#define NDIS_SUPPORT_NDIS630 0
++#endif
++#endif
++
++#define DD_NDIS_DEVICE_NAME "\\Device\\UNKNOWN"
++
++#define _NDIS_CONTROL_CODE(request, method) CTL_CODE (FILE_DEVICE_PHYSICAL_NETCARD, request, method, FILE_ANY_ACCESS)
++
++#define IOCTL_NDIS_QUERY_GLOBAL_STATS _NDIS_CONTROL_CODE (0, METHOD_OUT_DIRECT)
++#define IOCTL_NDIS_QUERY_ALL_STATS _NDIS_CONTROL_CODE (1, METHOD_OUT_DIRECT)
++#define IOCTL_NDIS_DO_PNP_OPERATION _NDIS_CONTROL_CODE (2, METHOD_BUFFERED)
++#define IOCTL_NDIS_QUERY_SELECTED_STATS _NDIS_CONTROL_CODE (3, METHOD_OUT_DIRECT)
++#define IOCTL_NDIS_ENUMERATE_INTERFACES _NDIS_CONTROL_CODE (4, METHOD_BUFFERED)
++#define IOCTL_NDIS_ADD_TDI_DEVICE _NDIS_CONTROL_CODE (5, METHOD_BUFFERED)
++#define IOCTL_NDIS_GET_LOG_DATA _NDIS_CONTROL_CODE (7, METHOD_OUT_DIRECT)
++#define IOCTL_NDIS_GET_VERSION _NDIS_CONTROL_CODE (8, METHOD_BUFFERED)
++
++#define IOCTL_NDIS_RESERVED1 _NDIS_CONTROL_CODE (9, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED2 _NDIS_CONTROL_CODE (0xa, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED3 _NDIS_CONTROL_CODE (0xb, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED4 _NDIS_CONTROL_CODE (0xc, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED5 CTL_CODE (FILE_DEVICE_PHYSICAL_NETCARD, 0xd, METHOD_BUFFERED, FILE_ANY_ACCESS)
++#define IOCTL_NDIS_RESERVED6 CTL_CODE (FILE_DEVICE_PHYSICAL_NETCARD, 0xe, METHOD_BUFFERED, FILE_WRITE_ACCESS)
++#define IOCTL_NDIS_RESERVED7 _NDIS_CONTROL_CODE (0xf, METHOD_OUT_DIRECT)
++#define IOCTL_NDIS_RESERVED8 _NDIS_CONTROL_CODE (0x10, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED9 _NDIS_CONTROL_CODE (0x11, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED10 _NDIS_CONTROL_CODE (0x12, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED11 _NDIS_CONTROL_CODE (0x13, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED12 _NDIS_CONTROL_CODE (0x14, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED13 _NDIS_CONTROL_CODE (0x15, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED14 _NDIS_CONTROL_CODE (0x16, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED15 _NDIS_CONTROL_CODE (0x17, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED16 _NDIS_CONTROL_CODE (0x18, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED17 _NDIS_CONTROL_CODE (0x19, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED18 _NDIS_CONTROL_CODE (0x1a, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED19 _NDIS_CONTROL_CODE (0x1b, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED20 _NDIS_CONTROL_CODE (0x1c, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED21 _NDIS_CONTROL_CODE (0x1d, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED22 _NDIS_CONTROL_CODE (0x1e, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED23 _NDIS_CONTROL_CODE (0x1f, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED24 _NDIS_CONTROL_CODE (0x20, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED25 _NDIS_CONTROL_CODE (0x21, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED26 _NDIS_CONTROL_CODE (0x22, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED27 _NDIS_CONTROL_CODE (0x23, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED28 _NDIS_CONTROL_CODE (0x24, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED29 _NDIS_CONTROL_CODE (0x25, METHOD_BUFFERED)
++#define IOCTL_NDIS_RESERVED30 _NDIS_CONTROL_CODE (0x26, METHOD_BUFFERED)
++
++ typedef ULONG NDIS_OID, *PNDIS_OID;
++ typedef struct _NDIS_STATISTICS_VALUE {
++ NDIS_OID Oid;
++ ULONG DataLength;
++ UCHAR Data[1];
++ } NDIS_STATISTICS_VALUE;
++
++ typedef NDIS_STATISTICS_VALUE UNALIGNED *PNDIS_STATISTICS_VALUE;
++
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++ typedef struct _NDIS_STATISTICS_VALUE_EX {
++ NDIS_OID Oid;
++ ULONG DataLength;
++ ULONG Length;
++ UCHAR Data[1];
++ } NDIS_STATISTICS_VALUE_EX;
++
++ typedef NDIS_STATISTICS_VALUE_EX UNALIGNED *PNDIS_STATISTICS_VALUE_EX;
++#endif
++
++ typedef struct _NDIS_VAR_DATA_DESC {
++ USHORT Length;
++ USHORT MaximumLength;
++ ULONG_PTR Offset;
++ } NDIS_VAR_DATA_DESC, *PNDIS_VAR_DATA_DESC;
++
++#ifndef GUID_DEFINED
++/* not in mingw32, use replacement
++#include <guiddef.h>
++ */
++#include <basetyps.h>
++#endif
++
++#define NDIS_OBJECT_TYPE_DEFAULT 0x80
++#define NDIS_OBJECT_TYPE_MINIPORT_INIT_PARAMETERS 0x81
++#define NDIS_OBJECT_TYPE_SG_DMA_DESCRIPTION 0x83
++#define NDIS_OBJECT_TYPE_MINIPORT_INTERRUPT 0x84
++#define NDIS_OBJECT_TYPE_DEVICE_OBJECT_ATTRIBUTES 0x85
++#define NDIS_OBJECT_TYPE_BIND_PARAMETERS 0x86
++#define NDIS_OBJECT_TYPE_OPEN_PARAMETERS 0x87
++#define NDIS_OBJECT_TYPE_RSS_CAPABILITIES 0x88
++#define NDIS_OBJECT_TYPE_RSS_PARAMETERS 0x89
++#define NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS 0x8a
++#define NDIS_OBJECT_TYPE_FILTER_DRIVER_CHARACTERISTICS 0x8b
++#define NDIS_OBJECT_TYPE_FILTER_PARTIAL_CHARACTERISTICS 0x8c
++#define NDIS_OBJECT_TYPE_FILTER_ATTRIBUTES 0x8d
++#define NDIS_OBJECT_TYPE_CLIENT_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS 0x8e
++#define NDIS_OBJECT_TYPE_PROVIDER_CHIMNEY_OFFLOAD_GENERIC_CHARACTERISTICS 0x8f
++#define NDIS_OBJECT_TYPE_CO_PROTOCOL_CHARACTERISTICS 0x90
++#define NDIS_OBJECT_TYPE_CO_MINIPORT_CHARACTERISTICS 0x91
++#define NDIS_OBJECT_TYPE_MINIPORT_PNP_CHARACTERISTICS 0x92
++#define NDIS_OBJECT_TYPE_CLIENT_CHIMNEY_OFFLOAD_CHARACTERISTICS 0x93
++#define NDIS_OBJECT_TYPE_PROVIDER_CHIMNEY_OFFLOAD_CHARACTERISTICS 0x94
++#define NDIS_OBJECT_TYPE_PROTOCOL_DRIVER_CHARACTERISTICS 0x95
++#define NDIS_OBJECT_TYPE_REQUEST_EX 0x96
++#define NDIS_OBJECT_TYPE_OID_REQUEST 0x96
++#define NDIS_OBJECT_TYPE_TIMER_CHARACTERISTICS 0x97
++#define NDIS_OBJECT_TYPE_STATUS_INDICATION 0x98
++#define NDIS_OBJECT_TYPE_FILTER_ATTACH_PARAMETERS 0x99
++#define NDIS_OBJECT_TYPE_FILTER_PAUSE_PARAMETERS 0x9a
++#define NDIS_OBJECT_TYPE_FILTER_RESTART_PARAMETERS 0x9b
++#define NDIS_OBJECT_TYPE_PORT_CHARACTERISTICS 0x9c
++#define NDIS_OBJECT_TYPE_PORT_STATE 0x9d
++#define NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 0x9e
++#define NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES 0x9f
++#define NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_OFFLOAD_ATTRIBUTES 0xa0
++#define NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES 0xa1
++#define NDIS_OBJECT_TYPE_RESTART_GENERAL_ATTRIBUTES 0xa2
++#define NDIS_OBJECT_TYPE_PROTOCOL_RESTART_PARAMETERS 0xa3
++#define NDIS_OBJECT_TYPE_MINIPORT_ADD_DEVICE_REGISTRATION_ATTRIBUTES 0xa4
++#define NDIS_OBJECT_TYPE_CO_CALL_MANAGER_OPTIONAL_HANDLERS 0xa5
++#define NDIS_OBJECT_TYPE_CO_CLIENT_OPTIONAL_HANDLERS 0xa6
++#define NDIS_OBJECT_TYPE_OFFLOAD 0xa7
++#define NDIS_OBJECT_TYPE_OFFLOAD_ENCAPSULATION 0xa8
++#define NDIS_OBJECT_TYPE_CONFIGURATION_OBJECT 0xa9
++#define NDIS_OBJECT_TYPE_DRIVER_WRAPPER_OBJECT 0xaa
++#if NDIS_SUPPORT_NDIS61
++#define NDIS_OBJECT_TYPE_HD_SPLIT_ATTRIBUTES 0xab
++#endif
++#define NDIS_OBJECT_TYPE_NSI_NETWORK_RW_STRUCT 0xac
++#define NDIS_OBJECT_TYPE_NSI_COMPARTMENT_RW_STRUCT 0xad
++#define NDIS_OBJECT_TYPE_NSI_INTERFACE_PERSIST_RW_STRUCT 0xae
++#if NDIS_SUPPORT_NDIS61
++#define NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES 0xaf
++#endif
++#if NDIS_SUPPORT_NDIS620
++#define NDIS_OBJECT_TYPE_SHARED_MEMORY_PROVIDER_CHARACTERISTICS 0xb0
++#define NDIS_OBJECT_TYPE_RSS_PROCESSOR_INFO 0xb1
++#endif
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_OBJECT_TYPE_NDK_PROVIDER_CHARACTERISTICS 0xb2
++#define NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_NDK_ATTRIBUTES 0xb3
++#define NDIS_OBJECT_TYPE_MINIPORT_SS_CHARACTERISTICS 0xb4
++#define NDIS_OBJECT_TYPE_QOS_CAPABILITIES 0xb5
++#define NDIS_OBJECT_TYPE_QOS_PARAMETERS 0xb6
++#define NDIS_OBJECT_TYPE_QOS_CLASSIFICATION_ELEMENT 0xb7
++#define NDIS_OBJECT_TYPE_SWITCH_OPTIONAL_HANDLERS 0xb8
++#define NDIS_OBJECT_TYPE_IOCTL_OID_INFO 0xb9
++#define NDIS_OBJECT_TYPE_LBFO_DIAGNOSTIC_OID 0xba
++#endif
++
++ typedef struct _NDIS_OBJECT_HEADER {
++ UCHAR Type;
++ UCHAR Revision;
++ USHORT Size;
++ } NDIS_OBJECT_HEADER, *PNDIS_OBJECT_HEADER;
++
++ typedef enum _NDIS_REQUEST_TYPE {
++ NdisRequestQueryInformation,
++ NdisRequestSetInformation,
++ NdisRequestQueryStatistics,
++ NdisRequestOpen,
++ NdisRequestClose,
++ NdisRequestSend,
++ NdisRequestTransferData,
++ NdisRequestReset,
++ NdisRequestGeneric1,
++ NdisRequestGeneric2,
++ NdisRequestGeneric3,
++ NdisRequestGeneric4
++#if NDIS_SUPPORT_NDIS6
++ , NdisRequestMethod
++#endif
++ } NDIS_REQUEST_TYPE, *PNDIS_REQUEST_TYPE;
++
++#define NDIS_OBJECT_REVISION_1 1
++
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++#define NDIS_STATISTICS_FLAGS_VALID_DIRECTED_FRAMES_RCV 0x00000001
++#define NDIS_STATISTICS_FLAGS_VALID_MULTICAST_FRAMES_RCV 0x00000002
++#define NDIS_STATISTICS_FLAGS_VALID_BROADCAST_FRAMES_RCV 0x00000004
++#define NDIS_STATISTICS_FLAGS_VALID_BYTES_RCV 0x00000008
++#define NDIS_STATISTICS_FLAGS_VALID_RCV_DISCARDS 0x00000010
++#define NDIS_STATISTICS_FLAGS_VALID_RCV_ERROR 0x00000020
++#define NDIS_STATISTICS_FLAGS_VALID_DIRECTED_FRAMES_XMIT 0x00000040
++#define NDIS_STATISTICS_FLAGS_VALID_MULTICAST_FRAMES_XMIT 0x00000080
++#define NDIS_STATISTICS_FLAGS_VALID_BROADCAST_FRAMES_XMIT 0x00000100
++#define NDIS_STATISTICS_FLAGS_VALID_BYTES_XMIT 0x00000200
++#define NDIS_STATISTICS_FLAGS_VALID_XMIT_ERROR 0x00000400
++#define NDIS_STATISTICS_FLAGS_VALID_XMIT_DISCARDS 0x00008000
++#define NDIS_STATISTICS_FLAGS_VALID_DIRECTED_BYTES_RCV 0x00010000
++#define NDIS_STATISTICS_FLAGS_VALID_MULTICAST_BYTES_RCV 0x00020000
++#define NDIS_STATISTICS_FLAGS_VALID_BROADCAST_BYTES_RCV 0x00040000
++#define NDIS_STATISTICS_FLAGS_VALID_DIRECTED_BYTES_XMIT 0x00080000
++#define NDIS_STATISTICS_FLAGS_VALID_MULTICAST_BYTES_XMIT 0x00100000
++#define NDIS_STATISTICS_FLAGS_VALID_BROADCAST_BYTES_XMIT 0x00200000
++
++#define NDIS_INTERRUPT_MODERATION_CHANGE_NEEDS_RESET 0x00000001
++#define NDIS_INTERRUPT_MODERATION_CHANGE_NEEDS_REINITIALIZE 0x00000002
++
++#define NDIS_STATISTICS_INFO_REVISION_1 1
++#define NDIS_INTERRUPT_MODERATION_PARAMETERS_REVISION_1 1
++#define NDIS_TIMEOUT_DPC_REQUEST_CAPABILITIES_REVISION_1 1
++#define NDIS_OBJECT_TYPE_PCI_DEVICE_CUSTOM_PROPERTIES_REVISION_1 1
++#if NTDDI_VERSION >= 0x06010000 || NDIS_SUPPORT_NDIS620
++#define NDIS_OBJECT_TYPE_PCI_DEVICE_CUSTOM_PROPERTIES_REVISION_2 2
++#endif
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_RSC_STATISTICS_REVISION_1 1
++#endif
++
++#define NDIS_SIZEOF_STATISTICS_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_STATISTICS_INFO, ifHCOutBroadcastOctets)
++#define NDIS_SIZEOF_INTERRUPT_MODERATION_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_INTERRUPT_MODERATION_PARAMETERS, InterruptModeration)
++#define NDIS_SIZEOF_TIMEOUT_DPC_REQUEST_CAPABILITIES_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_TIMEOUT_DPC_REQUEST_CAPABILITIES, TimeoutArray)
++#define NDIS_SIZEOF_PCI_DEVICE_CUSTOM_PROPERTIES_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_PCI_DEVICE_CUSTOM_PROPERTIES, MaxLinkWidth)
++#if NTDDI_VERSION >= 0x06010000 || NDIS_SUPPORT_NDIS620
++#define NDIS_SIZEOF_PCI_DEVICE_CUSTOM_PROPERTIES_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_PCI_DEVICE_CUSTOM_PROPERTIES, MaxInterruptMessages)
++#endif
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_SIZEOF_RSC_STATISTICS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RSC_STATISTICS_INFO, Aborts)
++#endif
++
++ typedef struct _NDIS_STATISTICS_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG SupportedStatistics;
++ ULONG64 ifInDiscards;
++ ULONG64 ifInErrors;
++ ULONG64 ifHCInOctets;
++ ULONG64 ifHCInUcastPkts;
++ ULONG64 ifHCInMulticastPkts;
++ ULONG64 ifHCInBroadcastPkts;
++ ULONG64 ifHCOutOctets;
++ ULONG64 ifHCOutUcastPkts;
++ ULONG64 ifHCOutMulticastPkts;
++ ULONG64 ifHCOutBroadcastPkts;
++ ULONG64 ifOutErrors;
++ ULONG64 ifOutDiscards;
++ ULONG64 ifHCInUcastOctets;
++ ULONG64 ifHCInMulticastOctets;
++ ULONG64 ifHCInBroadcastOctets;
++ ULONG64 ifHCOutUcastOctets;
++ ULONG64 ifHCOutMulticastOctets;
++ ULONG64 ifHCOutBroadcastOctets;
++ } NDIS_STATISTICS_INFO, *PNDIS_STATISTICS_INFO;
++
++#if NDIS_SUPPORT_NDIS630
++ typedef struct _NDIS_RSC_STATISTICS_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG64 CoalescedPkts;
++ ULONG64 CoalescedOctets;
++ ULONG64 CoalesceEvents;
++ ULONG64 Aborts;
++ } NDIS_RSC_STATISTICS_INFO, *PNDIS_RSC_STATISTICS_INFO;
++#endif
++
++ typedef enum _NDIS_INTERRUPT_MODERATION {
++ NdisInterruptModerationUnknown,
++ NdisInterruptModerationNotSupported,
++ NdisInterruptModerationEnabled,
++ NdisInterruptModerationDisabled
++ } NDIS_INTERRUPT_MODERATION, *PNDIS_INTERRUPT_MODERATION;
++
++ typedef struct _NDIS_INTERRUPT_MODERATION_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_INTERRUPT_MODERATION InterruptModeration;
++ } NDIS_INTERRUPT_MODERATION_PARAMETERS, *PNDIS_INTERRUPT_MODERATION_PARAMETERS;
++
++ typedef struct _NDIS_TIMEOUT_DPC_REQUEST_CAPABILITIES {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG TimeoutArrayLength;
++ ULONG TimeoutArray[1];
++ } NDIS_TIMEOUT_DPC_REQUEST_CAPABILITIES, *PNDIS_TIMEOUT_DPC_REQUEST_CAPABILITIES;
++
++ typedef struct _NDIS_PCI_DEVICE_CUSTOM_PROPERTIES {
++ NDIS_OBJECT_HEADER Header;
++ UINT32 DeviceType;
++ UINT32 CurrentSpeedAndMode;
++ UINT32 CurrentPayloadSize;
++ UINT32 MaxPayloadSize;
++ UINT32 MaxReadRequestSize;
++ UINT32 CurrentLinkSpeed;
++ UINT32 CurrentLinkWidth;
++ UINT32 MaxLinkSpeed;
++ UINT32 MaxLinkWidth;
++#if (NTDDI_VERSION >= 0x06010000 || NDIS_SUPPORT_NDIS620)
++ UINT32 PciExpressVersion;
++ UINT32 InterruptType;
++ UINT32 MaxInterruptMessages;
++#endif
++ } NDIS_PCI_DEVICE_CUSTOM_PROPERTIES, *PNDIS_PCI_DEVICE_CUSTOM_PROPERTIES;
++#endif
++
++#define OID_GEN_SUPPORTED_LIST 0x00010101
++#define OID_GEN_HARDWARE_STATUS 0x00010102
++#define OID_GEN_MEDIA_SUPPORTED 0x00010103
++#define OID_GEN_MEDIA_IN_USE 0x00010104
++#define OID_GEN_MAXIMUM_LOOKAHEAD 0x00010105
++#define OID_GEN_MAXIMUM_FRAME_SIZE 0x00010106
++#define OID_GEN_LINK_SPEED 0x00010107
++#define OID_GEN_TRANSMIT_BUFFER_SPACE 0x00010108
++#define OID_GEN_RECEIVE_BUFFER_SPACE 0x00010109
++#define OID_GEN_TRANSMIT_BLOCK_SIZE 0x0001010a
++#define OID_GEN_RECEIVE_BLOCK_SIZE 0x0001010b
++#define OID_GEN_VENDOR_ID 0x0001010c
++#define OID_GEN_VENDOR_DESCRIPTION 0x0001010d
++#define OID_GEN_CURRENT_PACKET_FILTER 0x0001010e
++#define OID_GEN_CURRENT_LOOKAHEAD 0x0001010f
++#define OID_GEN_DRIVER_VERSION 0x00010110
++#define OID_GEN_MAXIMUM_TOTAL_SIZE 0x00010111
++#define OID_GEN_PROTOCOL_OPTIONS 0x00010112
++#define OID_GEN_MAC_OPTIONS 0x00010113
++#define OID_GEN_MEDIA_CONNECT_STATUS 0x00010114
++#define OID_GEN_MAXIMUM_SEND_PACKETS 0x00010115
++
++#define OID_GEN_VENDOR_DRIVER_VERSION 0x00010116
++#define OID_GEN_SUPPORTED_GUIDS 0x00010117
++#define OID_GEN_NETWORK_LAYER_ADDRESSES 0x00010118
++#define OID_GEN_TRANSPORT_HEADER_OFFSET 0x00010119
++#define OID_GEN_MEDIA_CAPABILITIES 0x00010201
++#define OID_GEN_PHYSICAL_MEDIUM 0x00010202
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++#define OID_GEN_RECEIVE_SCALE_CAPABILITIES 0x00010203
++#define OID_GEN_RECEIVE_SCALE_PARAMETERS 0x00010204
++#define OID_GEN_MAC_ADDRESS 0x00010205
++#define OID_GEN_MAX_LINK_SPEED 0x00010206
++#define OID_GEN_LINK_STATE 0x00010207
++#define OID_GEN_LINK_PARAMETERS 0x00010208
++#define OID_GEN_INTERRUPT_MODERATION 0x00010209
++#define OID_GEN_NDIS_RESERVED_3 0x0001020a
++#define OID_GEN_NDIS_RESERVED_4 0x0001020b
++#define OID_GEN_NDIS_RESERVED_5 0x0001020c
++#define OID_GEN_ENUMERATE_PORTS 0x0001020d
++#define OID_GEN_PORT_STATE 0x0001020e
++#define OID_GEN_PORT_AUTHENTICATION_PARAMETERS 0x0001020f
++#define OID_GEN_TIMEOUT_DPC_REQUEST_CAPABILITIES 0x00010210
++#define OID_GEN_PCI_DEVICE_CUSTOM_PROPERTIES 0x00010211
++#define OID_GEN_NDIS_RESERVED_6 0x00010212
++#define OID_GEN_PHYSICAL_MEDIUM_EX 0x00010213
++#endif
++
++#define OID_GEN_MACHINE_NAME 0x0001021a
++#define OID_GEN_RNDIS_CONFIG_PARAMETER 0x0001021b
++#define OID_GEN_VLAN_ID 0x0001021c
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++#define OID_GEN_RECEIVE_HASH 0x0001021f
++#define OID_GEN_MINIPORT_RESTART_ATTRIBUTES 0x0001021d
++
++#if NDIS_SUPPORT_NDIS61
++#define OID_GEN_HD_SPLIT_PARAMETERS 0x0001021e
++#define OID_GEN_HD_SPLIT_CURRENT_CONFIG 0x00010220
++#endif
++
++#define OID_GEN_PROMISCUOUS_MODE 0x00010280
++#define OID_GEN_LAST_CHANGE 0x00010281
++#define OID_GEN_DISCONTINUITY_TIME 0x00010282
++#define OID_GEN_OPERATIONAL_STATUS 0x00010283
++#define OID_GEN_XMIT_LINK_SPEED 0x00010284
++#define OID_GEN_RCV_LINK_SPEED 0x00010285
++#define OID_GEN_UNKNOWN_PROTOS 0x00010286
++#define OID_GEN_INTERFACE_INFO 0x00010287
++#define OID_GEN_ADMIN_STATUS 0x00010288
++#define OID_GEN_ALIAS 0x00010289
++#define OID_GEN_MEDIA_CONNECT_STATUS_EX 0x0001028a
++#define OID_GEN_LINK_SPEED_EX 0x0001028b
++#define OID_GEN_MEDIA_DUPLEX_STATE 0x0001028c
++#define OID_GEN_IP_OPER_STATUS 0x0001028d
++
++#define OID_WWAN_DRIVER_CAPS 0x0e010100
++#define OID_WWAN_DEVICE_CAPS 0x0e010101
++#define OID_WWAN_READY_INFO 0x0e010102
++#define OID_WWAN_RADIO_STATE 0x0e010103
++#define OID_WWAN_PIN 0x0e010104
++#define OID_WWAN_PIN_LIST 0x0e010105
++#define OID_WWAN_HOME_PROVIDER 0x0e010106
++#define OID_WWAN_PREFERRED_PROVIDERS 0x0e010107
++#define OID_WWAN_VISIBLE_PROVIDERS 0x0e010108
++#define OID_WWAN_REGISTER_STATE 0x0e010109
++#define OID_WWAN_PACKET_SERVICE 0x0e01010a
++#define OID_WWAN_SIGNAL_STATE 0x0e01010b
++#define OID_WWAN_CONNECT 0x0e01010c
++#define OID_WWAN_PROVISIONED_CONTEXTS 0x0e01010d
++#define OID_WWAN_SERVICE_ACTIVATION 0x0e01010e
++#define OID_WWAN_SMS_CONFIGURATION 0x0e01010f
++#define OID_WWAN_SMS_READ 0x0e010110
++#define OID_WWAN_SMS_SEND 0x0e010111
++#define OID_WWAN_SMS_DELETE 0x0e010112
++#define OID_WWAN_SMS_STATUS 0x0e010113
++#define OID_WWAN_VENDOR_SPECIFIC 0x0e010114
++#endif
++
++#if NTDDI_VERSION >= 0x06020000 || NDIS_SUPPORT_NDIS630
++#define OID_WWAN_AUTH_CHALLENGE 0x0e010115
++#define OID_WWAN_ENUMERATE_DEVICE_SERVICES 0x0e010116
++#define OID_WWAN_SUBSCRIBE_DEVICE_SERVICE_EVENTS 0x0e010117
++#define OID_WWAN_DEVICE_SERVICE_COMMAND 0x0e010118
++#define OID_WWAN_USSD 0x0e010119
++#define OID_WWAN_PIN_EX 0x0e010121
++#define OID_WWAN_ENUMERATE_DEVICE_SERVICE_COMMANDS 0x0e010122
++#define OID_WWAN_DEVICE_SERVICE_SESSION 0x0e010123
++#define OID_WWAN_DEVICE_SERVICE_SESSION_WRITE 0x0e010124
++#define OID_WWAN_PREFERRED_MULTICARRIER_PROVIDERS 0x0e010125
++#endif
++
++#define OID_GEN_XMIT_OK 0x00020101
++#define OID_GEN_RCV_OK 0x00020102
++#define OID_GEN_XMIT_ERROR 0x00020103
++#define OID_GEN_RCV_ERROR 0x00020104
++#define OID_GEN_RCV_NO_BUFFER 0x00020105
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++#define OID_GEN_STATISTICS 0x00020106
++#endif
++
++#define OID_GEN_DIRECTED_BYTES_XMIT 0x00020201
++#define OID_GEN_DIRECTED_FRAMES_XMIT 0x00020202
++#define OID_GEN_MULTICAST_BYTES_XMIT 0x00020203
++#define OID_GEN_MULTICAST_FRAMES_XMIT 0x00020204
++#define OID_GEN_BROADCAST_BYTES_XMIT 0x00020205
++#define OID_GEN_BROADCAST_FRAMES_XMIT 0x00020206
++#define OID_GEN_DIRECTED_BYTES_RCV 0x00020207
++#define OID_GEN_DIRECTED_FRAMES_RCV 0x00020208
++#define OID_GEN_MULTICAST_BYTES_RCV 0x00020209
++#define OID_GEN_MULTICAST_FRAMES_RCV 0x0002020a
++#define OID_GEN_BROADCAST_BYTES_RCV 0x0002020b
++#define OID_GEN_BROADCAST_FRAMES_RCV 0x0002020c
++#define OID_GEN_RCV_CRC_ERROR 0x0002020d
++#define OID_GEN_TRANSMIT_QUEUE_LENGTH 0x0002020e
++#define OID_GEN_GET_TIME_CAPS 0x0002020f
++#define OID_GEN_GET_NETCARD_TIME 0x00020210
++#define OID_GEN_NETCARD_LOAD 0x00020211
++#define OID_GEN_DEVICE_PROFILE 0x00020212
++#define OID_GEN_INIT_TIME_MS 0x00020213
++#define OID_GEN_RESET_COUNTS 0x00020214
++#define OID_GEN_MEDIA_SENSE_COUNTS 0x00020215
++#define OID_GEN_FRIENDLY_NAME 0x00020216
++#define OID_GEN_NDIS_RESERVED_1 0x00020217
++#define OID_GEN_NDIS_RESERVED_2 0x00020218
++#define OID_GEN_NDIS_RESERVED_5 0x0001020c
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++#define OID_GEN_BYTES_RCV 0x00020219
++#define OID_GEN_BYTES_XMIT 0x0002021a
++#define OID_GEN_RCV_DISCARDS 0x0002021b
++#define OID_GEN_XMIT_DISCARDS 0x0002021c
++#endif
++#if NTDDI_VERSION >= 0x06020000 || NDIS_SUPPORT_NDIS630
++#define OID_TCP_RSC_STATISTICS 0x0002021d
++#define OID_GEN_NDIS_RESERVED_7 0x0002021e
++#endif
++
++#define OID_GEN_CO_SUPPORTED_LIST OID_GEN_SUPPORTED_LIST
++#define OID_GEN_CO_HARDWARE_STATUS OID_GEN_HARDWARE_STATUS
++#define OID_GEN_CO_MEDIA_SUPPORTED OID_GEN_MEDIA_SUPPORTED
++#define OID_GEN_CO_MEDIA_IN_USE OID_GEN_MEDIA_IN_USE
++#define OID_GEN_CO_LINK_SPEED OID_GEN_LINK_SPEED
++#define OID_GEN_CO_VENDOR_ID OID_GEN_VENDOR_ID
++#define OID_GEN_CO_VENDOR_DESCRIPTION OID_GEN_VENDOR_DESCRIPTION
++#define OID_GEN_CO_DRIVER_VERSION OID_GEN_DRIVER_VERSION
++#define OID_GEN_CO_PROTOCOL_OPTIONS OID_GEN_PROTOCOL_OPTIONS
++#define OID_GEN_CO_MAC_OPTIONS OID_GEN_MAC_OPTIONS
++#define OID_GEN_CO_MEDIA_CONNECT_STATUS OID_GEN_MEDIA_CONNECT_STATUS
++#define OID_GEN_CO_VENDOR_DRIVER_VERSION OID_GEN_VENDOR_DRIVER_VERSION
++#define OID_GEN_CO_SUPPORTED_GUIDS OID_GEN_SUPPORTED_GUIDS
++#define OID_GEN_CO_GET_TIME_CAPS OID_GEN_GET_TIME_CAPS
++#define OID_GEN_CO_GET_NETCARD_TIME OID_GEN_GET_NETCARD_TIME
++#define OID_GEN_CO_MINIMUM_LINK_SPEED 0x00020120
++
++#define OID_GEN_CO_XMIT_PDUS_OK OID_GEN_XMIT_OK
++#define OID_GEN_CO_RCV_PDUS_OK OID_GEN_RCV_OK
++#define OID_GEN_CO_XMIT_PDUS_ERROR OID_GEN_XMIT_ERROR
++#define OID_GEN_CO_RCV_PDUS_ERROR OID_GEN_RCV_ERROR
++#define OID_GEN_CO_RCV_PDUS_NO_BUFFER OID_GEN_RCV_NO_BUFFER
++
++#define OID_GEN_CO_RCV_CRC_ERROR OID_GEN_RCV_CRC_ERROR
++#define OID_GEN_CO_TRANSMIT_QUEUE_LENGTH OID_GEN_TRANSMIT_QUEUE_LENGTH
++#define OID_GEN_CO_BYTES_XMIT OID_GEN_DIRECTED_BYTES_XMIT
++#define OID_GEN_CO_BYTES_RCV OID_GEN_DIRECTED_BYTES_RCV
++#define OID_GEN_CO_NETCARD_LOAD OID_GEN_NETCARD_LOAD
++#define OID_GEN_CO_DEVICE_PROFILE OID_GEN_DEVICE_PROFILE
++#define OID_GEN_CO_BYTES_XMIT_OUTSTANDING 0x00020221
++
++#define OID_802_3_PERMANENT_ADDRESS 0x01010101
++#define OID_802_3_CURRENT_ADDRESS 0x01010102
++#define OID_802_3_MULTICAST_LIST 0x01010103
++#define OID_802_3_MAXIMUM_LIST_SIZE 0x01010104
++
++#define OID_802_3_MAC_OPTIONS 0x01010105
++
++#define NDIS_802_3_MAC_OPTION_PRIORITY 0x00000001
++
++#define OID_802_3_RCV_ERROR_ALIGNMENT 0x01020101
++#define OID_802_3_XMIT_ONE_COLLISION 0x01020102
++#define OID_802_3_XMIT_MORE_COLLISIONS 0x01020103
++
++#define OID_802_3_XMIT_DEFERRED 0x01020201
++#define OID_802_3_XMIT_MAX_COLLISIONS 0x01020202
++#define OID_802_3_RCV_OVERRUN 0x01020203
++#define OID_802_3_XMIT_UNDERRUN 0x01020204
++#define OID_802_3_XMIT_HEARTBEAT_FAILURE 0x01020205
++#define OID_802_3_XMIT_TIMES_CRS_LOST 0x01020206
++#define OID_802_3_XMIT_LATE_COLLISIONS 0x01020207
++
++#if (NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6)
++#define OID_802_3_ADD_MULTICAST_ADDRESS 0x01010208
++#define OID_802_3_DELETE_MULTICAST_ADDRESS 0x01010209
++#endif
++
++#define OID_802_5_PERMANENT_ADDRESS 0x02010101
++#define OID_802_5_CURRENT_ADDRESS 0x02010102
++#define OID_802_5_CURRENT_FUNCTIONAL 0x02010103
++#define OID_802_5_CURRENT_GROUP 0x02010104
++#define OID_802_5_LAST_OPEN_STATUS 0x02010105
++#define OID_802_5_CURRENT_RING_STATUS 0x02010106
++#define OID_802_5_CURRENT_RING_STATE 0x02010107
++
++#define OID_802_5_LINE_ERRORS 0x02020101
++#define OID_802_5_LOST_FRAMES 0x02020102
++
++#define OID_802_5_BURST_ERRORS 0x02020201
++#define OID_802_5_AC_ERRORS 0x02020202
++#define OID_802_5_ABORT_DELIMETERS 0x02020203
++#define OID_802_5_FRAME_COPIED_ERRORS 0x02020204
++#define OID_802_5_FREQUENCY_ERRORS 0x02020205
++#define OID_802_5_TOKEN_ERRORS 0x02020206
++#define OID_802_5_INTERNAL_ERRORS 0x02020207
++
++#define OID_FDDI_LONG_PERMANENT_ADDR 0x03010101
++#define OID_FDDI_LONG_CURRENT_ADDR 0x03010102
++#define OID_FDDI_LONG_MULTICAST_LIST 0x03010103
++#define OID_FDDI_LONG_MAX_LIST_SIZE 0x03010104
++#define OID_FDDI_SHORT_PERMANENT_ADDR 0x03010105
++#define OID_FDDI_SHORT_CURRENT_ADDR 0x03010106
++#define OID_FDDI_SHORT_MULTICAST_LIST 0x03010107
++#define OID_FDDI_SHORT_MAX_LIST_SIZE 0x03010108
++
++#define OID_FDDI_ATTACHMENT_TYPE 0x03020101
++#define OID_FDDI_UPSTREAM_NODE_LONG 0x03020102
++#define OID_FDDI_DOWNSTREAM_NODE_LONG 0x03020103
++#define OID_FDDI_FRAME_ERRORS 0x03020104
++#define OID_FDDI_FRAMES_LOST 0x03020105
++#define OID_FDDI_RING_MGT_STATE 0x03020106
++#define OID_FDDI_LCT_FAILURES 0x03020107
++#define OID_FDDI_LEM_REJECTS 0x03020108
++#define OID_FDDI_LCONNECTION_STATE 0x03020109
++
++#define OID_FDDI_SMT_STATION_ID 0x03030201
++#define OID_FDDI_SMT_OP_VERSION_ID 0x03030202
++#define OID_FDDI_SMT_HI_VERSION_ID 0x03030203
++#define OID_FDDI_SMT_LO_VERSION_ID 0x03030204
++#define OID_FDDI_SMT_MANUFACTURER_DATA 0x03030205
++#define OID_FDDI_SMT_USER_DATA 0x03030206
++#define OID_FDDI_SMT_MIB_VERSION_ID 0x03030207
++#define OID_FDDI_SMT_MAC_CT 0x03030208
++#define OID_FDDI_SMT_NON_MASTER_CT 0x03030209
++#define OID_FDDI_SMT_MASTER_CT 0x0303020a
++#define OID_FDDI_SMT_AVAILABLE_PATHS 0x0303020b
++#define OID_FDDI_SMT_CONFIG_CAPABILITIES 0x0303020c
++#define OID_FDDI_SMT_CONFIG_POLICY 0x0303020d
++#define OID_FDDI_SMT_CONNECTION_POLICY 0x0303020e
++#define OID_FDDI_SMT_T_NOTIFY 0x0303020f
++#define OID_FDDI_SMT_STAT_RPT_POLICY 0x03030210
++#define OID_FDDI_SMT_TRACE_MAX_EXPIRATION 0x03030211
++#define OID_FDDI_SMT_PORT_INDEXES 0x03030212
++#define OID_FDDI_SMT_MAC_INDEXES 0x03030213
++#define OID_FDDI_SMT_BYPASS_PRESENT 0x03030214
++#define OID_FDDI_SMT_ECM_STATE 0x03030215
++#define OID_FDDI_SMT_CF_STATE 0x03030216
++#define OID_FDDI_SMT_HOLD_STATE 0x03030217
++#define OID_FDDI_SMT_REMOTE_DISCONNECT_FLAG 0x03030218
++#define OID_FDDI_SMT_STATION_STATUS 0x03030219
++#define OID_FDDI_SMT_PEER_WRAP_FLAG 0x0303021a
++#define OID_FDDI_SMT_MSG_TIME_STAMP 0x0303021b
++#define OID_FDDI_SMT_TRANSITION_TIME_STAMP 0x0303021c
++#define OID_FDDI_SMT_SET_COUNT 0x0303021d
++#define OID_FDDI_SMT_LAST_SET_STATION_ID 0x0303021e
++#define OID_FDDI_MAC_FRAME_STATUS_FUNCTIONS 0x0303021f
++#define OID_FDDI_MAC_BRIDGE_FUNCTIONS 0x03030220
++#define OID_FDDI_MAC_T_MAX_CAPABILITY 0x03030221
++#define OID_FDDI_MAC_TVX_CAPABILITY 0x03030222
++#define OID_FDDI_MAC_AVAILABLE_PATHS 0x03030223
++#define OID_FDDI_MAC_CURRENT_PATH 0x03030224
++#define OID_FDDI_MAC_UPSTREAM_NBR 0x03030225
++#define OID_FDDI_MAC_DOWNSTREAM_NBR 0x03030226
++#define OID_FDDI_MAC_OLD_UPSTREAM_NBR 0x03030227
++#define OID_FDDI_MAC_OLD_DOWNSTREAM_NBR 0x03030228
++#define OID_FDDI_MAC_DUP_ADDRESS_TEST 0x03030229
++#define OID_FDDI_MAC_REQUESTED_PATHS 0x0303022a
++#define OID_FDDI_MAC_DOWNSTREAM_PORT_TYPE 0x0303022b
++#define OID_FDDI_MAC_INDEX 0x0303022c
++#define OID_FDDI_MAC_SMT_ADDRESS 0x0303022d
++#define OID_FDDI_MAC_LONG_GRP_ADDRESS 0x0303022e
++#define OID_FDDI_MAC_SHORT_GRP_ADDRESS 0x0303022f
++#define OID_FDDI_MAC_T_REQ 0x03030230
++#define OID_FDDI_MAC_T_NEG 0x03030231
++#define OID_FDDI_MAC_T_MAX 0x03030232
++#define OID_FDDI_MAC_TVX_VALUE 0x03030233
++#define OID_FDDI_MAC_T_PRI0 0x03030234
++#define OID_FDDI_MAC_T_PRI1 0x03030235
++#define OID_FDDI_MAC_T_PRI2 0x03030236
++#define OID_FDDI_MAC_T_PRI3 0x03030237
++#define OID_FDDI_MAC_T_PRI4 0x03030238
++#define OID_FDDI_MAC_T_PRI5 0x03030239
++#define OID_FDDI_MAC_T_PRI6 0x0303023a
++#define OID_FDDI_MAC_FRAME_CT 0x0303023b
++#define OID_FDDI_MAC_COPIED_CT 0x0303023c
++#define OID_FDDI_MAC_TRANSMIT_CT 0x0303023d
++#define OID_FDDI_MAC_TOKEN_CT 0x0303023e
++#define OID_FDDI_MAC_ERROR_CT 0x0303023f
++#define OID_FDDI_MAC_LOST_CT 0x03030240
++#define OID_FDDI_MAC_TVX_EXPIRED_CT 0x03030241
++#define OID_FDDI_MAC_NOT_COPIED_CT 0x03030242
++#define OID_FDDI_MAC_LATE_CT 0x03030243
++#define OID_FDDI_MAC_RING_OP_CT 0x03030244
++#define OID_FDDI_MAC_FRAME_ERROR_THRESHOLD 0x03030245
++#define OID_FDDI_MAC_FRAME_ERROR_RATIO 0x03030246
++#define OID_FDDI_MAC_NOT_COPIED_THRESHOLD 0x03030247
++#define OID_FDDI_MAC_NOT_COPIED_RATIO 0x03030248
++#define OID_FDDI_MAC_RMT_STATE 0x03030249
++#define OID_FDDI_MAC_DA_FLAG 0x0303024a
++#define OID_FDDI_MAC_UNDA_FLAG 0x0303024b
++#define OID_FDDI_MAC_FRAME_ERROR_FLAG 0x0303024c
++#define OID_FDDI_MAC_NOT_COPIED_FLAG 0x0303024d
++#define OID_FDDI_MAC_MA_UNITDATA_AVAILABLE 0x0303024e
++#define OID_FDDI_MAC_HARDWARE_PRESENT 0x0303024f
++#define OID_FDDI_MAC_MA_UNITDATA_ENABLE 0x03030250
++#define OID_FDDI_PATH_INDEX 0x03030251
++#define OID_FDDI_PATH_RING_LATENCY 0x03030252
++#define OID_FDDI_PATH_TRACE_STATUS 0x03030253
++#define OID_FDDI_PATH_SBA_PAYLOAD 0x03030254
++#define OID_FDDI_PATH_SBA_OVERHEAD 0x03030255
++#define OID_FDDI_PATH_CONFIGURATION 0x03030256
++#define OID_FDDI_PATH_T_R_MODE 0x03030257
++#define OID_FDDI_PATH_SBA_AVAILABLE 0x03030258
++#define OID_FDDI_PATH_TVX_LOWER_BOUND 0x03030259
++#define OID_FDDI_PATH_T_MAX_LOWER_BOUND 0x0303025a
++#define OID_FDDI_PATH_MAX_T_REQ 0x0303025b
++#define OID_FDDI_PORT_MY_TYPE 0x0303025c
++#define OID_FDDI_PORT_NEIGHBOR_TYPE 0x0303025d
++#define OID_FDDI_PORT_CONNECTION_POLICIES 0x0303025e
++#define OID_FDDI_PORT_MAC_INDICATED 0x0303025f
++#define OID_FDDI_PORT_CURRENT_PATH 0x03030260
++#define OID_FDDI_PORT_REQUESTED_PATHS 0x03030261
++#define OID_FDDI_PORT_MAC_PLACEMENT 0x03030262
++#define OID_FDDI_PORT_AVAILABLE_PATHS 0x03030263
++#define OID_FDDI_PORT_MAC_LOOP_TIME 0x03030264
++#define OID_FDDI_PORT_PMD_CLASS 0x03030265
++#define OID_FDDI_PORT_CONNECTION_CAPABILITIES 0x03030266
++#define OID_FDDI_PORT_INDEX 0x03030267
++#define OID_FDDI_PORT_MAINT_LS 0x03030268
++#define OID_FDDI_PORT_BS_FLAG 0x03030269
++#define OID_FDDI_PORT_PC_LS 0x0303026a
++#define OID_FDDI_PORT_EB_ERROR_CT 0x0303026b
++#define OID_FDDI_PORT_LCT_FAIL_CT 0x0303026c
++#define OID_FDDI_PORT_LER_ESTIMATE 0x0303026d
++#define OID_FDDI_PORT_LEM_REJECT_CT 0x0303026e
++#define OID_FDDI_PORT_LEM_CT 0x0303026f
++#define OID_FDDI_PORT_LER_CUTOFF 0x03030270
++#define OID_FDDI_PORT_LER_ALARM 0x03030271
++#define OID_FDDI_PORT_CONNNECT_STATE 0x03030272
++#define OID_FDDI_PORT_PCM_STATE 0x03030273
++#define OID_FDDI_PORT_PC_WITHHOLD 0x03030274
++#define OID_FDDI_PORT_LER_FLAG 0x03030275
++#define OID_FDDI_PORT_HARDWARE_PRESENT 0x03030276
++#define OID_FDDI_SMT_STATION_ACTION 0x03030277
++#define OID_FDDI_PORT_ACTION 0x03030278
++#define OID_FDDI_IF_DESCR 0x03030279
++#define OID_FDDI_IF_TYPE 0x0303027a
++#define OID_FDDI_IF_MTU 0x0303027b
++#define OID_FDDI_IF_SPEED 0x0303027c
++#define OID_FDDI_IF_PHYS_ADDRESS 0x0303027d
++#define OID_FDDI_IF_ADMIN_STATUS 0x0303027e
++#define OID_FDDI_IF_OPER_STATUS 0x0303027f
++#define OID_FDDI_IF_LAST_CHANGE 0x03030280
++#define OID_FDDI_IF_IN_OCTETS 0x03030281
++#define OID_FDDI_IF_IN_UCAST_PKTS 0x03030282
++#define OID_FDDI_IF_IN_NUCAST_PKTS 0x03030283
++#define OID_FDDI_IF_IN_DISCARDS 0x03030284
++#define OID_FDDI_IF_IN_ERRORS 0x03030285
++#define OID_FDDI_IF_IN_UNKNOWN_PROTOS 0x03030286
++#define OID_FDDI_IF_OUT_OCTETS 0x03030287
++#define OID_FDDI_IF_OUT_UCAST_PKTS 0x03030288
++#define OID_FDDI_IF_OUT_NUCAST_PKTS 0x03030289
++#define OID_FDDI_IF_OUT_DISCARDS 0x0303028a
++#define OID_FDDI_IF_OUT_ERRORS 0x0303028b
++#define OID_FDDI_IF_OUT_QLEN 0x0303028c
++#define OID_FDDI_IF_SPECIFIC 0x0303028d
++
++#define OID_WAN_PERMANENT_ADDRESS 0x04010101
++#define OID_WAN_CURRENT_ADDRESS 0x04010102
++#define OID_WAN_QUALITY_OF_SERVICE 0x04010103
++#define OID_WAN_PROTOCOL_TYPE 0x04010104
++#define OID_WAN_MEDIUM_SUBTYPE 0x04010105
++#define OID_WAN_HEADER_FORMAT 0x04010106
++
++#define OID_WAN_GET_INFO 0x04010107
++#define OID_WAN_SET_LINK_INFO 0x04010108
++#define OID_WAN_GET_LINK_INFO 0x04010109
++#define OID_WAN_LINE_COUNT 0x0401010a
++#define OID_WAN_PROTOCOL_CAPS 0x0401010b
++
++#define OID_WAN_GET_BRIDGE_INFO 0x0401020a
++#define OID_WAN_SET_BRIDGE_INFO 0x0401020b
++#define OID_WAN_GET_COMP_INFO 0x0401020c
++#define OID_WAN_SET_COMP_INFO 0x0401020d
++#define OID_WAN_GET_STATS_INFO 0x0401020e
++
++#define OID_WAN_CO_GET_INFO 0x04010180
++#define OID_WAN_CO_SET_LINK_INFO 0x04010181
++#define OID_WAN_CO_GET_LINK_INFO 0x04010182
++#define OID_WAN_CO_GET_COMP_INFO 0x04010280
++#define OID_WAN_CO_SET_COMP_INFO 0x04010281
++#define OID_WAN_CO_GET_STATS_INFO 0x04010282
++
++#define OID_LTALK_CURRENT_NODE_ID 0x05010102
++
++#define OID_LTALK_IN_BROADCASTS 0x05020101
++#define OID_LTALK_IN_LENGTH_ERRORS 0x05020102
++
++#define OID_LTALK_OUT_NO_HANDLERS 0x05020201
++#define OID_LTALK_COLLISIONS 0x05020202
++#define OID_LTALK_DEFERS 0x05020203
++#define OID_LTALK_NO_DATA_ERRORS 0x05020204
++#define OID_LTALK_RANDOM_CTS_ERRORS 0x05020205
++#define OID_LTALK_FCS_ERRORS 0x05020206
++
++#define OID_ARCNET_PERMANENT_ADDRESS 0x06010101
++#define OID_ARCNET_CURRENT_ADDRESS 0x06010102
++
++#define OID_ARCNET_RECONFIGURATIONS 0x06020201
++
++#define OID_TAPI_ACCEPT 0x07030101
++#define OID_TAPI_ANSWER 0x07030102
++#define OID_TAPI_CLOSE 0x07030103
++#define OID_TAPI_CLOSE_CALL 0x07030104
++#define OID_TAPI_CONDITIONAL_MEDIA_DETECTION 0x07030105
++#define OID_TAPI_CONFIG_DIALOG 0x07030106
++#define OID_TAPI_DEV_SPECIFIC 0x07030107
++#define OID_TAPI_DIAL 0x07030108
++#define OID_TAPI_DROP 0x07030109
++#define OID_TAPI_GET_ADDRESS_CAPS 0x0703010a
++#define OID_TAPI_GET_ADDRESS_ID 0x0703010b
++#define OID_TAPI_GET_ADDRESS_STATUS 0x0703010c
++#define OID_TAPI_GET_CALL_ADDRESS_ID 0x0703010d
++#define OID_TAPI_GET_CALL_INFO 0x0703010e
++#define OID_TAPI_GET_CALL_STATUS 0x0703010f
++#define OID_TAPI_GET_DEV_CAPS 0x07030110
++#define OID_TAPI_GET_DEV_CONFIG 0x07030111
++#define OID_TAPI_GET_EXTENSION_ID 0x07030112
++#define OID_TAPI_GET_ID 0x07030113
++#define OID_TAPI_GET_LINE_DEV_STATUS 0x07030114
++#define OID_TAPI_MAKE_CALL 0x07030115
++#define OID_TAPI_NEGOTIATE_EXT_VERSION 0x07030116
++#define OID_TAPI_OPEN 0x07030117
++#define OID_TAPI_PROVIDER_INITIALIZE 0x07030118
++#define OID_TAPI_PROVIDER_SHUTDOWN 0x07030119
++#define OID_TAPI_SECURE_CALL 0x0703011a
++#define OID_TAPI_SELECT_EXT_VERSION 0x0703011b
++#define OID_TAPI_SEND_USER_USER_INFO 0x0703011c
++#define OID_TAPI_SET_APP_SPECIFIC 0x0703011d
++#define OID_TAPI_SET_CALL_PARAMS 0x0703011e
++#define OID_TAPI_SET_DEFAULT_MEDIA_DETECTION 0x0703011f
++#define OID_TAPI_SET_DEV_CONFIG 0x07030120
++#define OID_TAPI_SET_MEDIA_MODE 0x07030121
++#define OID_TAPI_SET_STATUS_MESSAGES 0x07030122
++#define OID_TAPI_GATHER_DIGITS 0x07030123
++#define OID_TAPI_MONITOR_DIGITS 0x07030124
++
++#define OID_ATM_SUPPORTED_VC_RATES 0x08010101
++#define OID_ATM_SUPPORTED_SERVICE_CATEGORY 0x08010102
++#define OID_ATM_SUPPORTED_AAL_TYPES 0x08010103
++#define OID_ATM_HW_CURRENT_ADDRESS 0x08010104
++#define OID_ATM_MAX_ACTIVE_VCS 0x08010105
++#define OID_ATM_MAX_ACTIVE_VCI_BITS 0x08010106
++#define OID_ATM_MAX_ACTIVE_VPI_BITS 0x08010107
++#define OID_ATM_MAX_AAL0_PACKET_SIZE 0x08010108
++#define OID_ATM_MAX_AAL1_PACKET_SIZE 0x08010109
++#define OID_ATM_MAX_AAL34_PACKET_SIZE 0x0801010a
++#define OID_ATM_MAX_AAL5_PACKET_SIZE 0x0801010b
++
++#define OID_ATM_SIGNALING_VPIVCI 0x08010201
++#define OID_ATM_ASSIGNED_VPI 0x08010202
++#define OID_ATM_ACQUIRE_ACCESS_NET_RESOURCES 0x08010203
++#define OID_ATM_RELEASE_ACCESS_NET_RESOURCES 0x08010204
++#define OID_ATM_ILMI_VPIVCI 0x08010205
++#define OID_ATM_DIGITAL_BROADCAST_VPIVCI 0x08010206
++#define OID_ATM_GET_NEAREST_FLOW 0x08010207
++#define OID_ATM_ALIGNMENT_REQUIRED 0x08010208
++#define OID_ATM_LECS_ADDRESS 0x08010209
++#define OID_ATM_SERVICE_ADDRESS 0x0801020a
++
++#define OID_ATM_CALL_PROCEEDING 0x0801020b
++#define OID_ATM_CALL_ALERTING 0x0801020c
++#define OID_ATM_PARTY_ALERTING 0x0801020d
++#define OID_ATM_CALL_NOTIFY 0x0801020e
++
++#define OID_ATM_MY_IP_NM_ADDRESS 0x0801020f
++
++#define OID_ATM_RCV_CELLS_OK 0x08020101
++#define OID_ATM_XMIT_CELLS_OK 0x08020102
++#define OID_ATM_RCV_CELLS_DROPPED 0x08020103
++
++#define OID_ATM_RCV_INVALID_VPI_VCI 0x08020201
++#define OID_ATM_CELLS_HEC_ERROR 0x08020202
++#define OID_ATM_RCV_REASSEMBLY_ERROR 0x08020203
++
++#define OID_802_11_BSSID 0x0d010101
++#define OID_802_11_SSID 0x0d010102
++#define OID_802_11_NETWORK_TYPES_SUPPORTED 0x0d010203
++#define OID_802_11_NETWORK_TYPE_IN_USE 0x0d010204
++#define OID_802_11_TX_POWER_LEVEL 0x0d010205
++#define OID_802_11_RSSI 0x0d010206
++#define OID_802_11_RSSI_TRIGGER 0x0d010207
++#define OID_802_11_INFRASTRUCTURE_MODE 0x0d010108
++#define OID_802_11_FRAGMENTATION_THRESHOLD 0x0d010209
++#define OID_802_11_RTS_THRESHOLD 0x0d01020a
++#define OID_802_11_NUMBER_OF_ANTENNAS 0x0d01020b
++#define OID_802_11_RX_ANTENNA_SELECTED 0x0d01020c
++#define OID_802_11_TX_ANTENNA_SELECTED 0x0d01020d
++#define OID_802_11_SUPPORTED_RATES 0x0d01020e
++#define OID_802_11_DESIRED_RATES 0x0d010210
++#define OID_802_11_CONFIGURATION 0x0d010211
++#define OID_802_11_STATISTICS 0x0d020212
++#define OID_802_11_ADD_WEP 0x0d010113
++#define OID_802_11_REMOVE_WEP 0x0d010114
++#define OID_802_11_DISASSOCIATE 0x0d010115
++#define OID_802_11_POWER_MODE 0x0d010216
++#define OID_802_11_BSSID_LIST 0x0d010217
++#define OID_802_11_AUTHENTICATION_MODE 0x0d010118
++#define OID_802_11_PRIVACY_FILTER 0x0d010119
++#define OID_802_11_BSSID_LIST_SCAN 0x0d01011a
++#define OID_802_11_WEP_STATUS 0x0d01011b
++
++#define OID_802_11_ENCRYPTION_STATUS OID_802_11_WEP_STATUS
++#define OID_802_11_RELOAD_DEFAULTS 0x0d01011c
++
++#define OID_802_11_ADD_KEY 0x0d01011d
++#define OID_802_11_REMOVE_KEY 0x0d01011e
++#define OID_802_11_ASSOCIATION_INFORMATION 0x0d01011f
++#define OID_802_11_TEST 0x0d010120
++#define OID_802_11_MEDIA_STREAM_MODE 0x0d010121
++#define OID_802_11_CAPABILITY 0x0d010122
++#define OID_802_11_PMKID 0x0d010123
++#define OID_802_11_NON_BCAST_SSID_LIST 0x0d010124
++#define OID_802_11_RADIO_STATUS 0x0d010125
++
++#define NDIS_ETH_TYPE_IPV4 0x0800
++#define NDIS_ETH_TYPE_ARP 0x0806
++#define NDIS_ETH_TYPE_IPV6 0x86dd
++#define NDIS_ETH_TYPE_802_1X 0x888e
++#define NDIS_ETH_TYPE_802_1Q 0x8100
++#define NDIS_ETH_TYPE_SLOW_PROTOCOL 0x8809
++
++#define NDIS_802_11_LENGTH_SSID 32
++#define NDIS_802_11_LENGTH_RATES 8
++#define NDIS_802_11_LENGTH_RATES_EX 16
++
++#define NDIS_802_11_AUTH_REQUEST_REAUTH 0x01
++#define NDIS_802_11_AUTH_REQUEST_KEYUPDATE 0x02
++#define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06
++#define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0e
++#define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS 0x0f
++
++#define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01
++
++#define NDIS_802_11_AI_REQFI_CAPABILITIES 1
++#define NDIS_802_11_AI_REQFI_LISTENINTERVAL 2
++#define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS 4
++
++#define NDIS_802_11_AI_RESFI_CAPABILITIES 1
++#define NDIS_802_11_AI_RESFI_STATUSCODE 2
++#define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4
++
++ typedef enum _NDIS_802_11_STATUS_TYPE {
++ Ndis802_11StatusType_Authentication,
++ Ndis802_11StatusType_MediaStreamMode,
++ Ndis802_11StatusType_PMKID_CandidateList,
++ Ndis802_11StatusTypeMax
++ } NDIS_802_11_STATUS_TYPE, *PNDIS_802_11_STATUS_TYPE;
++
++ typedef UCHAR NDIS_802_11_MAC_ADDRESS[6];
++
++ typedef struct _NDIS_802_11_STATUS_INDICATION {
++ NDIS_802_11_STATUS_TYPE StatusType;
++ } NDIS_802_11_STATUS_INDICATION, *PNDIS_802_11_STATUS_INDICATION;
++
++ typedef struct _NDIS_802_11_AUTHENTICATION_REQUEST {
++ ULONG Length;
++ NDIS_802_11_MAC_ADDRESS Bssid;
++ ULONG Flags;
++ } NDIS_802_11_AUTHENTICATION_REQUEST, *PNDIS_802_11_AUTHENTICATION_REQUEST;
++
++ typedef struct _PMKID_CANDIDATE {
++ NDIS_802_11_MAC_ADDRESS BSSID;
++ ULONG Flags;
++ } PMKID_CANDIDATE, *PPMKID_CANDIDATE;
++
++ typedef struct _NDIS_802_11_PMKID_CANDIDATE_LIST {
++ ULONG Version;
++ ULONG NumCandidates;
++ PMKID_CANDIDATE CandidateList[1];
++ } NDIS_802_11_PMKID_CANDIDATE_LIST, *PNDIS_802_11_PMKID_CANDIDATE_LIST;
++
++ typedef enum _NDIS_802_11_NETWORK_TYPE {
++ Ndis802_11FH,
++ Ndis802_11DS,
++ Ndis802_11OFDM5,
++ Ndis802_11OFDM24,
++ Ndis802_11Automode,
++ Ndis802_11NetworkTypeMax
++ } NDIS_802_11_NETWORK_TYPE, *PNDIS_802_11_NETWORK_TYPE;
++
++ typedef struct _NDIS_802_11_NETWORK_TYPE_LIST {
++ ULONG NumberOfItems;
++ NDIS_802_11_NETWORK_TYPE NetworkType [1];
++ } NDIS_802_11_NETWORK_TYPE_LIST, *PNDIS_802_11_NETWORK_TYPE_LIST;
++
++ typedef enum _NDIS_802_11_POWER_MODE {
++ Ndis802_11PowerModeCAM,
++ Ndis802_11PowerModeMAX_PSP,
++ Ndis802_11PowerModeFast_PSP,
++ Ndis802_11PowerModeMax
++ } NDIS_802_11_POWER_MODE, *PNDIS_802_11_POWER_MODE;
++
++ typedef ULONG NDIS_802_11_TX_POWER_LEVEL;
++ typedef LONG NDIS_802_11_RSSI;
++
++ typedef struct _NDIS_802_11_CONFIGURATION_FH {
++ ULONG Length;
++ ULONG HopPattern;
++ ULONG HopSet;
++ ULONG DwellTime;
++ } NDIS_802_11_CONFIGURATION_FH, *PNDIS_802_11_CONFIGURATION_FH;
++
++ typedef struct _NDIS_802_11_CONFIGURATION {
++ ULONG Length;
++ ULONG BeaconPeriod;
++ ULONG ATIMWindow;
++ ULONG DSConfig;
++ NDIS_802_11_CONFIGURATION_FH FHConfig;
++ } NDIS_802_11_CONFIGURATION, *PNDIS_802_11_CONFIGURATION;
++
++ typedef struct _NDIS_802_11_STATISTICS {
++ ULONG Length;
++ LARGE_INTEGER TransmittedFragmentCount;
++ LARGE_INTEGER MulticastTransmittedFrameCount;
++ LARGE_INTEGER FailedCount;
++ LARGE_INTEGER RetryCount;
++ LARGE_INTEGER MultipleRetryCount;
++ LARGE_INTEGER RTSSuccessCount;
++ LARGE_INTEGER RTSFailureCount;
++ LARGE_INTEGER ACKFailureCount;
++ LARGE_INTEGER FrameDuplicateCount;
++ LARGE_INTEGER ReceivedFragmentCount;
++ LARGE_INTEGER MulticastReceivedFrameCount;
++ LARGE_INTEGER FCSErrorCount;
++ LARGE_INTEGER TKIPLocalMICFailures;
++ LARGE_INTEGER TKIPICVErrorCount;
++ LARGE_INTEGER TKIPCounterMeasuresInvoked;
++ LARGE_INTEGER TKIPReplays;
++ LARGE_INTEGER CCMPFormatErrors;
++ LARGE_INTEGER CCMPReplays;
++ LARGE_INTEGER CCMPDecryptErrors;
++ LARGE_INTEGER FourWayHandshakeFailures;
++ LARGE_INTEGER WEPUndecryptableCount;
++ LARGE_INTEGER WEPICVErrorCount;
++ LARGE_INTEGER DecryptSuccessCount;
++ LARGE_INTEGER DecryptFailureCount;
++ } NDIS_802_11_STATISTICS, *PNDIS_802_11_STATISTICS;
++
++ typedef ULONG NDIS_802_11_KEY_INDEX;
++ typedef ULONGLONG NDIS_802_11_KEY_RSC;
++
++ typedef struct _NDIS_802_11_KEY {
++ ULONG Length;
++ ULONG KeyIndex;
++ ULONG KeyLength;
++ NDIS_802_11_MAC_ADDRESS BSSID;
++ NDIS_802_11_KEY_RSC KeyRSC;
++ UCHAR KeyMaterial[1];
++ } NDIS_802_11_KEY, *PNDIS_802_11_KEY;
++
++ typedef struct _NDIS_802_11_REMOVE_KEY {
++ ULONG Length;
++ ULONG KeyIndex;
++ NDIS_802_11_MAC_ADDRESS BSSID;
++ } NDIS_802_11_REMOVE_KEY, *PNDIS_802_11_REMOVE_KEY;
++ typedef struct _NDIS_802_11_WEP {
++ ULONG Length;
++ ULONG KeyIndex;
++ ULONG KeyLength;
++ UCHAR KeyMaterial[1];
++ } NDIS_802_11_WEP, *PNDIS_802_11_WEP;
++
++ typedef enum _NDIS_802_11_NETWORK_INFRASTRUCTURE {
++ Ndis802_11IBSS,
++ Ndis802_11Infrastructure,
++ Ndis802_11AutoUnknown,
++ Ndis802_11InfrastructureMax
++ } NDIS_802_11_NETWORK_INFRASTRUCTURE, *PNDIS_802_11_NETWORK_INFRASTRUCTURE;
++
++ typedef enum _NDIS_802_11_AUTHENTICATION_MODE {
++ Ndis802_11AuthModeOpen,
++ Ndis802_11AuthModeShared,
++ Ndis802_11AuthModeAutoSwitch,
++ Ndis802_11AuthModeWPA,
++ Ndis802_11AuthModeWPAPSK,
++ Ndis802_11AuthModeWPANone,
++ Ndis802_11AuthModeWPA2,
++ Ndis802_11AuthModeWPA2PSK,
++ Ndis802_11AuthModeMax
++ } NDIS_802_11_AUTHENTICATION_MODE, *PNDIS_802_11_AUTHENTICATION_MODE;
++
++ typedef UCHAR NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES];
++ typedef UCHAR NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX];
++
++ typedef struct _NDIS_802_11_SSID {
++ ULONG SsidLength;
++ UCHAR Ssid[NDIS_802_11_LENGTH_SSID];
++ } NDIS_802_11_SSID, *PNDIS_802_11_SSID;
++
++ typedef struct _NDIS_WLAN_BSSID {
++ ULONG Length;
++ NDIS_802_11_MAC_ADDRESS MacAddress;
++ UCHAR Reserved[2];
++ NDIS_802_11_SSID Ssid;
++ ULONG Privacy;
++ NDIS_802_11_RSSI Rssi;
++ NDIS_802_11_NETWORK_TYPE NetworkTypeInUse;
++ NDIS_802_11_CONFIGURATION Configuration;
++ NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode;
++ NDIS_802_11_RATES SupportedRates;
++ } NDIS_WLAN_BSSID, *PNDIS_WLAN_BSSID;
++
++ typedef struct _NDIS_802_11_BSSID_LIST {
++ ULONG NumberOfItems;
++ NDIS_WLAN_BSSID Bssid[1];
++ } NDIS_802_11_BSSID_LIST, *PNDIS_802_11_BSSID_LIST;
++
++ typedef struct _NDIS_WLAN_BSSID_EX {
++ ULONG Length;
++ NDIS_802_11_MAC_ADDRESS MacAddress;
++ UCHAR Reserved[2];
++ NDIS_802_11_SSID Ssid;
++ ULONG Privacy;
++ NDIS_802_11_RSSI Rssi;
++ NDIS_802_11_NETWORK_TYPE NetworkTypeInUse;
++ NDIS_802_11_CONFIGURATION Configuration;
++ NDIS_802_11_NETWORK_INFRASTRUCTURE InfrastructureMode;
++ NDIS_802_11_RATES_EX SupportedRates;
++ ULONG IELength;
++ UCHAR IEs[1];
++ } NDIS_WLAN_BSSID_EX, *PNDIS_WLAN_BSSID_EX;
++
++ typedef struct _NDIS_802_11_BSSID_LIST_EX {
++ ULONG NumberOfItems;
++ NDIS_WLAN_BSSID_EX Bssid[1];
++ } NDIS_802_11_BSSID_LIST_EX, *PNDIS_802_11_BSSID_LIST_EX;
++
++ typedef struct _NDIS_802_11_FIXED_IEs {
++ UCHAR Timestamp[8];
++ USHORT BeaconInterval;
++ USHORT Capabilities;
++ } NDIS_802_11_FIXED_IEs, *PNDIS_802_11_FIXED_IEs;
++
++ typedef struct _NDIS_802_11_VARIABLE_IEs {
++ UCHAR ElementID;
++ UCHAR Length;
++ UCHAR data[1];
++ } NDIS_802_11_VARIABLE_IEs, *PNDIS_802_11_VARIABLE_IEs;
++
++ typedef ULONG NDIS_802_11_FRAGMENTATION_THRESHOLD;
++ typedef ULONG NDIS_802_11_RTS_THRESHOLD;
++ typedef ULONG NDIS_802_11_ANTENNA;
++
++ typedef enum _NDIS_802_11_PRIVACY_FILTER {
++ Ndis802_11PrivFilterAcceptAll,
++ Ndis802_11PrivFilter8021xWEP
++ } NDIS_802_11_PRIVACY_FILTER, *PNDIS_802_11_PRIVACY_FILTER;
++
++ typedef enum _NDIS_802_11_WEP_STATUS {
++ Ndis802_11WEPEnabled,
++ Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
++ Ndis802_11WEPDisabled,
++ Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
++ Ndis802_11WEPKeyAbsent,
++ Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
++ Ndis802_11WEPNotSupported,
++ Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
++ Ndis802_11Encryption2Enabled,
++ Ndis802_11Encryption2KeyAbsent,
++ Ndis802_11Encryption3Enabled,
++ Ndis802_11Encryption3KeyAbsent
++ } NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS, NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
++
++ typedef enum _NDIS_802_11_RELOAD_DEFAULTS {
++ Ndis802_11ReloadWEPKeys
++ } NDIS_802_11_RELOAD_DEFAULTS, *PNDIS_802_11_RELOAD_DEFAULTS;
++
++ typedef struct _NDIS_802_11_AI_REQFI {
++ USHORT Capabilities;
++ USHORT ListenInterval;
++ NDIS_802_11_MAC_ADDRESS CurrentAPAddress;
++ } NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI;
++
++ typedef struct _NDIS_802_11_AI_RESFI {
++ USHORT Capabilities;
++ USHORT StatusCode;
++ USHORT AssociationId;
++ } NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI;
++
++ typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION {
++ ULONG Length;
++ USHORT AvailableRequestFixedIEs;
++ NDIS_802_11_AI_REQFI RequestFixedIEs;
++ ULONG RequestIELength;
++ ULONG OffsetRequestIEs;
++ USHORT AvailableResponseFixedIEs;
++ NDIS_802_11_AI_RESFI ResponseFixedIEs;
++ ULONG ResponseIELength;
++ ULONG OffsetResponseIEs;
++ } NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION;
++
++ typedef struct _NDIS_802_11_AUTHENTICATION_EVENT {
++ NDIS_802_11_STATUS_INDICATION Status;
++ NDIS_802_11_AUTHENTICATION_REQUEST Request[1];
++ } NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT;
++
++ typedef struct _NDIS_802_11_TEST {
++ ULONG Length;
++ ULONG Type;
++ _ANONYMOUS_UNION union {
++ NDIS_802_11_AUTHENTICATION_EVENT AuthenticationEvent;
++ NDIS_802_11_RSSI RssiTrigger;
++ };
++ } NDIS_802_11_TEST, *PNDIS_802_11_TEST;
++
++ typedef enum _NDIS_802_11_MEDIA_STREAM_MODE {
++ Ndis802_11MediaStreamOff,
++ Ndis802_11MediaStreamOn,
++ } NDIS_802_11_MEDIA_STREAM_MODE, *PNDIS_802_11_MEDIA_STREAM_MODE;
++
++ typedef UCHAR NDIS_802_11_PMKID_VALUE[16];
++
++ typedef struct _BSSID_INFO {
++ NDIS_802_11_MAC_ADDRESS BSSID;
++ NDIS_802_11_PMKID_VALUE PMKID;
++ } BSSID_INFO, *PBSSID_INFO;
++
++ typedef struct _NDIS_802_11_PMKID {
++ ULONG Length;
++ ULONG BSSIDInfoCount;
++ BSSID_INFO BSSIDInfo[1];
++ } NDIS_802_11_PMKID, *PNDIS_802_11_PMKID;
++
++ typedef struct _NDIS_802_11_AUTHENTICATION_ENCRYPTION {
++ NDIS_802_11_AUTHENTICATION_MODE AuthModeSupported;
++ NDIS_802_11_ENCRYPTION_STATUS EncryptStatusSupported;
++ } NDIS_802_11_AUTHENTICATION_ENCRYPTION, *PNDIS_802_11_AUTHENTICATION_ENCRYPTION;
++
++ typedef struct _NDIS_802_11_CAPABILITY {
++ ULONG Length;
++ ULONG Version;
++ ULONG NoOfPMKIDs;
++ ULONG NoOfAuthEncryptPairsSupported;
++ NDIS_802_11_AUTHENTICATION_ENCRYPTION AuthenticationEncryptionSupported[1];
++ } NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY;
++
++ typedef struct _NDIS_802_11_NON_BCAST_SSID_LIST {
++ ULONG NumberOfItems;
++ NDIS_802_11_SSID Non_Bcast_Ssid[1];
++ } NDIS_802_11_NON_BCAST_SSID_LIST, *PNDIS_802_11_NON_BCAST_SSID_LIST;
++
++ typedef enum _NDIS_802_11_RADIO_STATUS {
++ Ndis802_11RadioStatusOn,
++ Ndis802_11RadioStatusHardwareOff,
++ Ndis802_11RadioStatusSoftwareOff,
++ Ndis802_11RadioStatusHardwareSoftwareOff,
++ Ndis802_11RadioStatusMax
++ } NDIS_802_11_RADIO_STATUS, *PNDIS_802_11_RADIO_STATUS;
++
++#define OID_IRDA_RECEIVING 0x0a010100
++#define OID_IRDA_TURNAROUND_TIME 0x0a010101
++#define OID_IRDA_SUPPORTED_SPEEDS 0x0a010102
++#define OID_IRDA_LINK_SPEED 0x0a010103
++#define OID_IRDA_MEDIA_BUSY 0x0a010104
++
++#define OID_IRDA_EXTRA_RCV_BOFS 0x0a010200
++#define OID_IRDA_RATE_SNIFF 0x0a010201
++#define OID_IRDA_UNICAST_LIST 0x0a010202
++#define OID_IRDA_MAX_UNICAST_LIST_SIZE 0x0a010203
++#define OID_IRDA_MAX_RECEIVE_WINDOW_SIZE 0x0a010204
++#define OID_IRDA_MAX_SEND_WINDOW_SIZE 0x0a010205
++#define OID_IRDA_RESERVED1 0x0a01020a
++#define OID_IRDA_RESERVED2 0x0a01020f
++
++#define OID_1394_LOCAL_NODE_INFO 0x0c010101
++#define OID_1394_VC_INFO 0x0c010102
++
++#define OID_CO_ADD_PVC 0xfe000001
++#define OID_CO_DELETE_PVC 0xfe000002
++#define OID_CO_GET_CALL_INFORMATION 0xfe000003
++#define OID_CO_ADD_ADDRESS 0xfe000004
++#define OID_CO_DELETE_ADDRESS 0xfe000005
++#define OID_CO_GET_ADDRESSES 0xfe000006
++#define OID_CO_ADDRESS_CHANGE 0xfe000007
++#define OID_CO_SIGNALING_ENABLED 0xfe000008
++#define OID_CO_SIGNALING_DISABLED 0xfe000009
++#define OID_CO_AF_CLOSE 0xfe00000a
++
++#define OID_CO_TAPI_CM_CAPS 0xfe001001
++#define OID_CO_TAPI_LINE_CAPS 0xfe001002
++#define OID_CO_TAPI_ADDRESS_CAPS 0xfe001003
++#define OID_CO_TAPI_TRANSLATE_TAPI_CALLPARAMS 0xfe001004
++#define OID_CO_TAPI_TRANSLATE_NDIS_CALLPARAMS 0xfe001005
++#define OID_CO_TAPI_TRANSLATE_TAPI_SAP 0xfe001006
++#define OID_CO_TAPI_GET_CALL_DIAGNOSTICS 0xfe001007
++#define OID_CO_TAPI_REPORT_DIGITS 0xfe001008
++#define OID_CO_TAPI_DONT_REPORT_DIGITS 0xfe001009
++
++#define OID_PNP_CAPABILITIES 0xfd010100
++#define OID_PNP_SET_POWER 0xfd010101
++#define OID_PNP_QUERY_POWER 0xfd010102
++#define OID_PNP_ADD_WAKE_UP_PATTERN 0xfd010103
++#define OID_PNP_REMOVE_WAKE_UP_PATTERN 0xfd010104
++#define OID_PNP_WAKE_UP_PATTERN_LIST 0xfd010105
++#define OID_PNP_ENABLE_WAKE_UP 0xfd010106
++
++#define OID_PNP_WAKE_UP_OK 0xfd020200
++#define OID_PNP_WAKE_UP_ERROR 0xfd020201
++
++#if (NTDDI_VERSION >= 0x06010000 || NDIS_SUPPORT_NDIS620)
++#define OID_PM_CURRENT_CAPABILITIES 0xfd010107
++#define OID_PM_HARDWARE_CAPABILITIES 0xfd010108
++#define OID_PM_PARAMETERS 0xfd010109
++#define OID_PM_ADD_WOL_PATTERN 0xfd01010a
++#define OID_PM_REMOVE_WOL_PATTERN 0xfd01010b
++#define OID_PM_WOL_PATTERN_LIST 0xfd01010c
++#define OID_PM_ADD_PROTOCOL_OFFLOAD 0xfd01010d
++#define OID_PM_GET_PROTOCOL_OFFLOAD 0xfd01010e
++#define OID_PM_REMOVE_PROTOCOL_OFFLOAD 0xfd01010f
++#define OID_PM_PROTOCOL_OFFLOAD_LIST 0xfd010110
++#define OID_PM_RESERVED_1 0xfd010111
++
++#define OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES 0x00010221
++#define OID_RECEIVE_FILTER_GLOBAL_PARAMETERS 0x00010222
++#define OID_RECEIVE_FILTER_ALLOCATE_QUEUE 0x00010223
++#define OID_RECEIVE_FILTER_FREE_QUEUE 0x00010224
++#define OID_RECEIVE_FILTER_ENUM_QUEUES 0x00010225
++#define OID_RECEIVE_FILTER_QUEUE_PARAMETERS 0x00010226
++#define OID_RECEIVE_FILTER_SET_FILTER 0x00010227
++#define OID_RECEIVE_FILTER_CLEAR_FILTER 0x00010228
++#define OID_RECEIVE_FILTER_ENUM_FILTERS 0x00010229
++#define OID_RECEIVE_FILTER_PARAMETERS 0x0001022a
++#define OID_RECEIVE_FILTER_QUEUE_ALLOCATION_COMPLETE 0x0001022b
++#define OID_RECEIVE_FILTER_CURRENT_CAPABILITIES 0x0001022d
++#define OID_NIC_SWITCH_HARDWARE_CAPABILITIES 0x0001022e
++#define OID_NIC_SWITCH_CURRENT_CAPABILITIES 0x0001022f
++#if NDIS_SUPPORT_NDIS630
++#define OID_RECEIVE_FILTER_MOVE_FILTER 0x00010230
++#endif
++#define OID_VLAN_RESERVED1 0x00010231
++#define OID_VLAN_RESERVED2 0x00010232
++#define OID_VLAN_RESERVED3 0x00010233
++#define OID_VLAN_RESERVED4 0x00010234
++#if NDIS_SUPPORT_NDIS630
++#define OID_PACKET_COALESCING_FILTER_MATCH_COUNT 0x00010235
++#endif
++#endif
++
++#if NTDDI_VERSION >= 0x06020000 || NDIS_SUPPORT_NDIS630
++#define OID_NIC_SWITCH_CREATE_SWITCH 0x00010237
++#define OID_NIC_SWITCH_PARAMETERS 0x00010238
++#define OID_NIC_SWITCH_DELETE_SWITCH 0x00010239
++#define OID_NIC_SWITCH_ENUM_SWITCHES 0x00010240
++#define OID_NIC_SWITCH_CREATE_VPORT 0x00010241
++#define OID_NIC_SWITCH_VPORT_PARAMETERS 0x00010242
++#define OID_NIC_SWITCH_ENUM_VPORTS 0x00010243
++#define OID_NIC_SWITCH_DELETE_VPORT 0x00010244
++#define OID_NIC_SWITCH_ALLOCATE_VF 0x00010245
++#define OID_NIC_SWITCH_FREE_VF 0x00010246
++#define OID_NIC_SWITCH_VF_PARAMETERS 0x00010247
++#define OID_NIC_SWITCH_ENUM_VFS 0x00010248
++
++#define OID_SRIOV_HARDWARE_CAPABILITIES 0x00010249
++#define OID_SRIOV_CURRENT_CAPABILITIES 0x00010250
++#define OID_SRIOV_READ_VF_CONFIG_SPACE 0x00010251
++#define OID_SRIOV_WRITE_VF_CONFIG_SPACE 0x00010252
++#define OID_SRIOV_READ_VF_CONFIG_BLOCK 0x00010253
++#define OID_SRIOV_WRITE_VF_CONFIG_BLOCK 0x00010254
++#define OID_SRIOV_RESET_VF 0x00010255
++#define OID_SRIOV_SET_VF_POWER_STATE 0x00010256
++#define OID_SRIOV_VF_VENDOR_DEVICE_ID 0x00010257
++#define OID_SRIOV_PROBED_BARS 0x00010258
++#define OID_SRIOV_BAR_RESOURCES 0x00010259
++#define OID_SRIOV_PF_LUID 0x00010260
++
++#define OID_SRIOV_CONFIG_STATE 0x00010261
++#define OID_SRIOV_VF_SERIAL_NUMBER 0x00010262
++#define OID_SRIOV_VF_INVALIDATE_CONFIG_BLOCK 0x00010269
++
++#define OID_SWITCH_PROPERTY_ADD 0x00010263
++#define OID_SWITCH_PROPERTY_UPDATE 0x00010264
++#define OID_SWITCH_PROPERTY_DELETE 0x00010265
++#define OID_SWITCH_PROPERTY_ENUM 0x00010266
++#define OID_SWITCH_FEATURE_STATUS_QUERY 0x00010267
++
++#define OID_SWITCH_NIC_REQUEST 0x00010270
++#define OID_SWITCH_PORT_PROPERTY_ADD 0x00010271
++#define OID_SWITCH_PORT_PROPERTY_UPDATE 0x00010272
++#define OID_SWITCH_PORT_PROPERTY_DELETE 0x00010273
++#define OID_SWITCH_PORT_PROPERTY_ENUM 0x00010274
++#define OID_SWITCH_PARAMETERS 0x00010275
++#define OID_SWITCH_PORT_ARRAY 0x00010276
++#define OID_SWITCH_NIC_ARRAY 0x00010277
++#define OID_SWITCH_PORT_CREATE 0x00010278
++#define OID_SWITCH_PORT_DELETE 0x00010279
++#define OID_SWITCH_NIC_CREATE 0x0001027a
++#define OID_SWITCH_NIC_CONNECT 0x0001027b
++#define OID_SWITCH_NIC_DISCONNECT 0x0001027c
++#define OID_SWITCH_NIC_DELETE 0x0001027d
++#define OID_SWITCH_PORT_FEATURE_STATUS_QUERY 0x0001027e
++#define OID_SWITCH_PORT_TEARDOWN 0x0001027f
++#define OID_SWITCH_NIC_SAVE 0x00010290
++#define OID_SWITCH_NIC_SAVE_COMPLETE 0x00010291
++#define OID_SWITCH_NIC_RESTORE 0x00010292
++#define OID_SWITCH_NIC_RESTORE_COMPLETE 0x00010293
++#define OID_SWITCH_NIC_UPDATED 0x00010294
++#define OID_SWITCH_PORT_UPDATED 0x00010295
++#endif
++
++#define NDIS_PNP_WAKE_UP_MAGIC_PACKET 0x00000001
++#define NDIS_PNP_WAKE_UP_PATTERN_MATCH 0x00000002
++#define NDIS_PNP_WAKE_UP_LINK_CHANGE 0x00000004
++
++#define OID_TCP_TASK_OFFLOAD 0xfc010201
++#define OID_TCP_TASK_IPSEC_ADD_SA 0xfc010202
++#define OID_TCP_TASK_IPSEC_DELETE_SA 0xfc010203
++#define OID_TCP_SAN_SUPPORT 0xfc010204
++#define OID_TCP_TASK_IPSEC_ADD_UDPESP_SA 0xfc010205
++#define OID_TCP_TASK_IPSEC_DELETE_UDPESP_SA 0xfc010206
++#define OID_TCP4_OFFLOAD_STATS 0xfc010207
++#define OID_TCP6_OFFLOAD_STATS 0xfc010208
++#define OID_IP4_OFFLOAD_STATS 0xfc010209
++#define OID_IP6_OFFLOAD_STATS 0xfc01020a
++
++#define OID_TCP_OFFLOAD_CURRENT_CONFIG 0xfc01020b
++#define OID_TCP_OFFLOAD_PARAMETERS 0xfc01020c
++#define OID_TCP_OFFLOAD_HARDWARE_CAPABILITIES 0xfc01020d
++#define OID_TCP_CONNECTION_OFFLOAD_CURRENT_CONFIG 0xfc01020e
++#define OID_TCP_CONNECTION_OFFLOAD_HARDWARE_CAPABILITIES 0xfc01020f
++#define OID_OFFLOAD_ENCAPSULATION 0x0101010a
++
++#if NDIS_SUPPORT_NDIS61
++#define OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA 0xfc030202
++#define OID_TCP_TASK_IPSEC_OFFLOAD_V2_DELETE_SA 0xfc030203
++#define OID_TCP_TASK_IPSEC_OFFLOAD_V2_UPDATE_SA 0xfc030204
++#endif
++#if NDIS_SUPPORT_NDIS630
++#define OID_TCP_TASK_IPSEC_OFFLOAD_V2_ADD_SA_EX 0xfc030205
++#endif
++
++#define OID_FFP_SUPPORT 0xfc010210
++#define OID_FFP_FLUSH 0xfc010211
++#define OID_FFP_CONTROL 0xfc010212
++#define OID_FFP_PARAMS 0xfc010213
++#define OID_FFP_DATA 0xfc010214
++
++#define OID_FFP_DRIVER_STATS 0xfc020210
++#define OID_FFP_ADAPTER_STATS 0xfc020211
++
++#define OID_TCP_CONNECTION_OFFLOAD_PARAMETERS 0xfc030201
++
++#if NTDDI_VERSION >= 0x06010000 || NDIS_SUPPORT_NDIS620
++#define OID_TUNNEL_INTERFACE_SET_OID 0x0f010106
++#define OID_TUNNEL_INTERFACE_RELEASE_OID 0x0f010107
++#endif
++
++#define OID_QOS_RESERVED1 0xfb010100
++#define OID_QOS_RESERVED2 0xfb010101
++#define OID_QOS_RESERVED3 0xfb010102
++#define OID_QOS_RESERVED4 0xfb010103
++#define OID_QOS_RESERVED5 0xfb010104
++#define OID_QOS_RESERVED6 0xfb010105
++#define OID_QOS_RESERVED7 0xfb010106
++#define OID_QOS_RESERVED8 0xfb010107
++#define OID_QOS_RESERVED9 0xfb010108
++#define OID_QOS_RESERVED10 0xfb010109
++#define OID_QOS_RESERVED11 0xfb01010a
++#define OID_QOS_RESERVED12 0xfb01010b
++#define OID_QOS_RESERVED13 0xfb01010c
++#define OID_QOS_RESERVED14 0xfb01010d
++#define OID_QOS_RESERVED15 0xfb01010e
++#define OID_QOS_RESERVED16 0xfb01010f
++#define OID_QOS_RESERVED17 0xfb010110
++#define OID_QOS_RESERVED18 0xfb010111
++#define OID_QOS_RESERVED19 0xfb010112
++#define OID_QOS_RESERVED20 0xfb010113
++
++#define OFFLOAD_MAX_SAS 3
++
++#define OFFLOAD_INBOUND_SA 0x0001
++#define OFFLOAD_OUTBOUND_SA 0x0002
++
++ typedef struct NDIS_CO_DEVICE_PROFILE {
++ NDIS_VAR_DATA_DESC DeviceDescription;
++ NDIS_VAR_DATA_DESC DevSpecificInfo;
++ ULONG ulTAPISupplementaryPassThru;
++ ULONG ulAddressModes;
++ ULONG ulNumAddresses;
++ ULONG ulBearerModes;
++ ULONG ulMaxTxRate;
++ ULONG ulMinTxRate;
++ ULONG ulMaxRxRate;
++ ULONG ulMinRxRate;
++ ULONG ulMediaModes;
++ ULONG ulGenerateToneModes;
++ ULONG ulGenerateToneMaxNumFreq;
++ ULONG ulGenerateDigitModes;
++ ULONG ulMonitorToneMaxNumFreq;
++ ULONG ulMonitorToneMaxNumEntries;
++ ULONG ulMonitorDigitModes;
++ ULONG ulGatherDigitsMinTimeout;
++ ULONG ulGatherDigitsMaxTimeout;
++ ULONG ulDevCapFlags;
++ ULONG ulMaxNumActiveCalls;
++ ULONG ulAnswerMode;
++ ULONG ulUUIAcceptSize;
++ ULONG ulUUIAnswerSize;
++ ULONG ulUUIMakeCallSize;
++ ULONG ulUUIDropSize;
++ ULONG ulUUISendUserUserInfoSize;
++ ULONG ulUUICallInfoSize;
++ } NDIS_CO_DEVICE_PROFILE, *PNDIS_CO_DEVICE_PROFILE;
++
++#ifndef IP_EXPORT_INCLUDED
++ typedef ULONG IPAddr, IPMask;
++#endif
++ typedef ULONG SPI_TYPE;
++
++ typedef enum _OFFLOAD_OPERATION_E {
++ AUTHENTICATE = 1,
++ ENCRYPT
++ } OFFLOAD_OPERATION_E;
++
++ typedef struct _OFFLOAD_ALGO_INFO {
++ ULONG algoIdentifier;
++ ULONG algoKeylen;
++ ULONG algoRounds;
++ } OFFLOAD_ALGO_INFO, *POFFLOAD_ALGO_INFO;
++
++ typedef enum _OFFLOAD_CONF_ALGO {
++ OFFLOAD_IPSEC_CONF_NONE,
++ OFFLOAD_IPSEC_CONF_DES,
++ OFFLOAD_IPSEC_CONF_RESERVED,
++ OFFLOAD_IPSEC_CONF_3_DES,
++ OFFLOAD_IPSEC_CONF_MAX
++ } OFFLOAD_CONF_ALGO;
++
++ typedef enum _OFFLOAD_INTEGRITY_ALGO {
++ OFFLOAD_IPSEC_INTEGRITY_NONE,
++ OFFLOAD_IPSEC_INTEGRITY_MD5,
++ OFFLOAD_IPSEC_INTEGRITY_SHA,
++ OFFLOAD_IPSEC_INTEGRITY_MAX
++ } OFFLOAD_INTEGRITY_ALGO;
++
++ typedef struct _OFFLOAD_SECURITY_ASSOCIATION {
++ OFFLOAD_OPERATION_E Operation;
++ SPI_TYPE SPI;
++ OFFLOAD_ALGO_INFO IntegrityAlgo;
++ OFFLOAD_ALGO_INFO ConfAlgo;
++ OFFLOAD_ALGO_INFO Reserved;
++ } OFFLOAD_SECURITY_ASSOCIATION, *POFFLOAD_SECURITY_ASSOCIATION;
++
++ typedef struct _OFFLOAD_IPSEC_ADD_SA {
++ IPAddr SrcAddr;
++ IPMask SrcMask;
++ IPAddr DestAddr;
++ IPMask DestMask;
++ ULONG Protocol;
++ USHORT SrcPort;
++ USHORT DestPort;
++ IPAddr SrcTunnelAddr;
++ IPAddr DestTunnelAddr;
++ USHORT Flags;
++ SHORT NumSAs;
++ OFFLOAD_SECURITY_ASSOCIATION SecAssoc[OFFLOAD_MAX_SAS];
++ HANDLE OffloadHandle;
++ ULONG KeyLen;
++ UCHAR KeyMat[1];
++ } OFFLOAD_IPSEC_ADD_SA, *POFFLOAD_IPSEC_ADD_SA;
++
++ typedef struct _OFFLOAD_IPSEC_DELETE_SA {
++ HANDLE OffloadHandle;
++ } OFFLOAD_IPSEC_DELETE_SA, *POFFLOAD_IPSEC_DELETE_SA;
++
++ typedef enum _UDP_ENCAP_TYPE {
++ OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_IKE,
++ OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_OTHER
++ } UDP_ENCAP_TYPE, *PUDP_ENCAP_TYPE;
++
++ typedef struct _OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY {
++ UDP_ENCAP_TYPE UdpEncapType;
++ USHORT DstEncapPort;
++ } OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY, *POFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY;
++
++ typedef struct _OFFLOAD_IPSEC_ADD_UDPESP_SA {
++ IPAddr SrcAddr;
++ IPMask SrcMask;
++ IPAddr DstAddr;
++ IPMask DstMask;
++ ULONG Protocol;
++ USHORT SrcPort;
++ USHORT DstPort;
++ IPAddr SrcTunnelAddr;
++ IPAddr DstTunnelAddr;
++ USHORT Flags;
++ SHORT NumSAs;
++ OFFLOAD_SECURITY_ASSOCIATION SecAssoc[OFFLOAD_MAX_SAS];
++ HANDLE OffloadHandle;
++ OFFLOAD_IPSEC_UDPESP_ENCAPTYPE_ENTRY EncapTypeEntry;
++ HANDLE EncapTypeEntryOffldHandle;
++ ULONG KeyLen;
++ UCHAR KeyMat[1];
++ } OFFLOAD_IPSEC_ADD_UDPESP_SA, *POFFLOAD_IPSEC_ADD_UDPESP_SA;
++
++ typedef struct _OFFLOAD_IPSEC_DELETE_UDPESP_SA {
++ HANDLE OffloadHandle;
++ HANDLE EncapTypeEntryOffldHandle;
++ } OFFLOAD_IPSEC_DELETE_UDPESP_SA, *POFFLOAD_IPSEC_DELETE_UDPESP_SA;
++
++ typedef ULONG NDIS_VLAN_ID;
++
++ typedef enum _NDIS_MEDIUM {
++ NdisMedium802_3,
++ NdisMedium802_5,
++ NdisMediumFddi,
++ NdisMediumWan,
++ NdisMediumLocalTalk,
++ NdisMediumDix,
++ NdisMediumArcnetRaw,
++ NdisMediumArcnet878_2,
++ NdisMediumAtm,
++ NdisMediumWirelessWan,
++ NdisMediumIrda,
++ NdisMediumBpc,
++ NdisMediumCoWan,
++ NdisMedium1394,
++ NdisMediumInfiniBand,
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++ NdisMediumTunnel,
++ NdisMediumNative802_11,
++ NdisMediumLoopback,
++#endif
++#if NTDDI_VERSION >= 0x06010000
++ NdisMediumWiMAX,
++ NdisMediumIP,
++#endif
++ NdisMediumMax
++ } NDIS_MEDIUM, *PNDIS_MEDIUM;
++
++ typedef enum _NDIS_PHYSICAL_MEDIUM {
++ NdisPhysicalMediumUnspecified,
++ NdisPhysicalMediumWirelessLan,
++ NdisPhysicalMediumCableModem,
++ NdisPhysicalMediumPhoneLine,
++ NdisPhysicalMediumPowerLine,
++ NdisPhysicalMediumDSL,
++ NdisPhysicalMediumFibreChannel,
++ NdisPhysicalMedium1394,
++ NdisPhysicalMediumWirelessWan,
++ NdisPhysicalMediumNative802_11,
++ NdisPhysicalMediumBluetooth,
++ NdisPhysicalMediumInfiniband,
++ NdisPhysicalMediumWiMax,
++ NdisPhysicalMediumUWB,
++ NdisPhysicalMedium802_3,
++ NdisPhysicalMedium802_5,
++ NdisPhysicalMediumIrda,
++ NdisPhysicalMediumWiredWAN,
++ NdisPhysicalMediumWiredCoWan,
++ NdisPhysicalMediumOther,
++ NdisPhysicalMediumMax
++ } NDIS_PHYSICAL_MEDIUM, *PNDIS_PHYSICAL_MEDIUM;
++
++ typedef struct _TRANSPORT_HEADER_OFFSET {
++ USHORT ProtocolType;
++ USHORT HeaderOffset;
++ } TRANSPORT_HEADER_OFFSET, *PTRANSPORT_HEADER_OFFSET;
++
++ typedef struct _NETWORK_ADDRESS {
++ USHORT AddressLength;
++ USHORT AddressType;
++ UCHAR Address[1];
++ } NETWORK_ADDRESS, *PNETWORK_ADDRESS;
++
++ typedef struct _NETWORK_ADDRESS_LIST {
++ LONG AddressCount;
++ USHORT AddressType;
++ NETWORK_ADDRESS Address[1];
++ } NETWORK_ADDRESS_LIST, *PNETWORK_ADDRESS_LIST;
++
++ typedef struct _NETWORK_ADDRESS_IP {
++ USHORT sin_port;
++ ULONG in_addr;
++ UCHAR sin_zero[8];
++ } NETWORK_ADDRESS_IP, *PNETWORK_ADDRESS_IP;
++
++#define NDIS_PROTOCOL_ID_DEFAULT 0x00
++#define NDIS_PROTOCOL_ID_TCP_IP 0x02
++#define NDIS_PROTOCOL_ID_IPX 0x06
++#define NDIS_PROTOCOL_ID_NBF 0x07
++#define NDIS_PROTOCOL_ID_MAX 0x0f
++#define NDIS_PROTOCOL_ID_MASK 0x0f
++
++#define READABLE_LOCAL_CLOCK 0x00000001
++#define CLOCK_NETWORK_DERIVED 0x00000002
++#define CLOCK_PRECISION 0x00000004
++#define RECEIVE_TIME_INDICATION_CAPABLE 0x00000008
++#define TIMED_SEND_CAPABLE 0x00000010
++#define TIME_STAMP_CAPABLE 0x00000020
++
++#define NDIS_DEVICE_WAKE_UP_ENABLE 0x00000001
++#define NDIS_DEVICE_WAKE_ON_PATTERN_MATCH_ENABLE 0x00000002
++#define NDIS_DEVICE_WAKE_ON_MAGIC_PACKET_ENABLE 0x00000004
++
++#define WAN_PROTOCOL_KEEPS_STATS 0x00000001
++
++#define NETWORK_ADDRESS_LENGTH_IP sizeof (NETWORK_ADDRESS_IP)
++#define NETWORK_ADDRESS_LENGTH_IPX sizeof (NETWORK_ADDRESS_IPX)
++
++ typedef struct _NETWORK_ADDRESS_IPX {
++ ULONG NetworkAddress;
++ UCHAR NodeAddress[6];
++ USHORT Socket;
++ } NETWORK_ADDRESS_IPX, *PNETWORK_ADDRESS_IPX;
++
++ typedef enum _NDIS_HARDWARE_STATUS {
++ NdisHardwareStatusReady,
++ NdisHardwareStatusInitializing,
++ NdisHardwareStatusReset,
++ NdisHardwareStatusClosing,
++ NdisHardwareStatusNotReady
++ } NDIS_HARDWARE_STATUS, *PNDIS_HARDWARE_STATUS;
++
++ typedef struct _GEN_GET_TIME_CAPS {
++ ULONG Flags;
++ ULONG ClockPrecision;
++ } GEN_GET_TIME_CAPS, *PGEN_GET_TIME_CAPS;
++
++ typedef struct _GEN_GET_NETCARD_TIME {
++ ULONGLONG ReadTime;
++ } GEN_GET_NETCARD_TIME, *PGEN_GET_NETCARD_TIME;
++
++ typedef struct _NDIS_PM_PACKET_PATTERN {
++ ULONG Priority;
++ ULONG Reserved;
++ ULONG MaskSize;
++ ULONG PatternOffset;
++ ULONG PatternSize;
++ ULONG PatternFlags;
++ } NDIS_PM_PACKET_PATTERN, *PNDIS_PM_PACKET_PATTERN;
++
++ typedef enum _NDIS_DEVICE_POWER_STATE {
++ NdisDeviceStateUnspecified = 0,
++ NdisDeviceStateD0,
++ NdisDeviceStateD1,
++ NdisDeviceStateD2,
++ NdisDeviceStateD3,
++ NdisDeviceStateMaximum
++ } NDIS_DEVICE_POWER_STATE, *PNDIS_DEVICE_POWER_STATE;
++
++ typedef struct _NDIS_PM_WAKE_UP_CAPABILITIES {
++ NDIS_DEVICE_POWER_STATE MinMagicPacketWakeUp;
++ NDIS_DEVICE_POWER_STATE MinPatternWakeUp;
++ NDIS_DEVICE_POWER_STATE MinLinkChangeWakeUp;
++ } NDIS_PM_WAKE_UP_CAPABILITIES, *PNDIS_PM_WAKE_UP_CAPABILITIES;
++
++ typedef struct _NDIS_PNP_CAPABILITIES {
++ ULONG Flags;
++ NDIS_PM_WAKE_UP_CAPABILITIES WakeUpCapabilities;
++ } NDIS_PNP_CAPABILITIES, *PNDIS_PNP_CAPABILITIES;
++
++ typedef enum _NDIS_FDDI_ATTACHMENT_TYPE {
++ NdisFddiTypeIsolated = 1,
++ NdisFddiTypeLocalA,
++ NdisFddiTypeLocalB,
++ NdisFddiTypeLocalAB,
++ NdisFddiTypeLocalS,
++ NdisFddiTypeWrapA,
++ NdisFddiTypeWrapB,
++ NdisFddiTypeWrapAB,
++ NdisFddiTypeWrapS,
++ NdisFddiTypeCWrapA,
++ NdisFddiTypeCWrapB,
++ NdisFddiTypeCWrapS,
++ NdisFddiTypeThrough
++ } NDIS_FDDI_ATTACHMENT_TYPE, *PNDIS_FDDI_ATTACHMENT_TYPE;
++
++ typedef enum _NDIS_FDDI_RING_MGT_STATE {
++ NdisFddiRingIsolated = 1,
++ NdisFddiRingNonOperational,
++ NdisFddiRingOperational,
++ NdisFddiRingDetect,
++ NdisFddiRingNonOperationalDup,
++ NdisFddiRingOperationalDup,
++ NdisFddiRingDirected,
++ NdisFddiRingTrace
++ } NDIS_FDDI_RING_MGT_STATE, *PNDIS_FDDI_RING_MGT_STATE;
++
++ typedef enum _NDIS_FDDI_LCONNECTION_STATE {
++ NdisFddiStateOff = 1,
++ NdisFddiStateBreak,
++ NdisFddiStateTrace,
++ NdisFddiStateConnect,
++ NdisFddiStateNext,
++ NdisFddiStateSignal,
++ NdisFddiStateJoin,
++ NdisFddiStateVerify,
++ NdisFddiStateActive,
++ NdisFddiStateMaintenance
++ } NDIS_FDDI_LCONNECTION_STATE, *PNDIS_FDDI_LCONNECTION_STATE;
++
++ typedef enum _NDIS_WAN_MEDIUM_SUBTYPE {
++ NdisWanMediumHub,
++ NdisWanMediumX_25,
++ NdisWanMediumIsdn,
++ NdisWanMediumSerial,
++ NdisWanMediumFrameRelay,
++ NdisWanMediumAtm,
++ NdisWanMediumSonet,
++ NdisWanMediumSW56K,
++ NdisWanMediumPPTP,
++ NdisWanMediumL2TP,
++ NdisWanMediumIrda,
++ NdisWanMediumParallel,
++ NdisWanMediumPppoe,
++#if NTDDI_VERSION >= 0x06000000
++ NdisWanMediumSSTP,
++ NdisWanMediumAgileVPN,
++#endif
++ } NDIS_WAN_MEDIUM_SUBTYPE, *PNDIS_WAN_MEDIUM_SUBTYPE;
++
++ typedef enum _NDIS_WAN_HEADER_FORMAT {
++ NdisWanHeaderNative,
++ NdisWanHeaderEthernet
++ } NDIS_WAN_HEADER_FORMAT, *PNDIS_WAN_HEADER_FORMAT;
++
++ typedef enum _NDIS_WAN_QUALITY {
++ NdisWanRaw,
++ NdisWanErrorControl,
++ NdisWanReliable
++ } NDIS_WAN_QUALITY, *PNDIS_WAN_QUALITY;
++
++ typedef struct _NDIS_WAN_PROTOCOL_CAPS {
++ ULONG Flags;
++ ULONG Reserved;
++ } NDIS_WAN_PROTOCOL_CAPS, *PNDIS_WAN_PROTOCOL_CAPS;
++
++ typedef enum _NDIS_802_5_RING_STATE {
++ NdisRingStateOpened = 1,
++ NdisRingStateClosed,
++ NdisRingStateOpening,
++ NdisRingStateClosing,
++ NdisRingStateOpenFailure,
++ NdisRingStateRingFailure
++ } NDIS_802_5_RING_STATE, *PNDIS_802_5_RING_STATE;
++
++ typedef enum _NDIS_MEDIA_STATE {
++ NdisMediaStateConnected,
++ NdisMediaStateDisconnected
++ } NDIS_MEDIA_STATE, *PNDIS_MEDIA_STATE;
++
++ typedef ULONG Priority_802_3;
++
++ typedef struct _NDIS_CO_LINK_SPEED {
++ ULONG Outbound;
++ ULONG Inbound;
++ } NDIS_CO_LINK_SPEED, *PNDIS_CO_LINK_SPEED;
++
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++#define NDIS_LINK_SPEED_UNKNOWN NET_IF_LINK_SPEED_UNKNOWN
++
++ typedef struct _NDIS_LINK_SPEED {
++ ULONG64 XmitLinkSpeed;
++ ULONG64 RcvLinkSpeed;
++ } NDIS_LINK_SPEED, *PNDIS_LINK_SPEED;
++#endif
++
++#ifndef _NDIS_
++ typedef int NDIS_STATUS, *PNDIS_STATUS;
++#endif
++
++/*
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++#ifndef __WINDOT11_H__
++#include <windot11.h>
++#endif
++#endif
++ */
++
++#define fNDIS_GUID_TO_OID 0x00000001
++#define fNDIS_GUID_TO_STATUS 0x00000002
++#define fNDIS_GUID_ANSI_STRING 0x00000004
++#define fNDIS_GUID_UNICODE_STRING 0x00000008
++#define fNDIS_GUID_ARRAY 0x00000010
++#define fNDIS_GUID_ALLOW_READ 0x00000020
++#define fNDIS_GUID_ALLOW_WRITE 0x00000040
++#define fNDIS_GUID_METHOD 0x00000080
++#define fNDIS_GUID_NDIS_RESERVED 0x00000100
++#define fNDIS_GUID_SUPPORT_COMMON_HEADER 0x00000200
++
++#define NDIS_PACKET_TYPE_DIRECTED 0x00000001
++#define NDIS_PACKET_TYPE_MULTICAST 0x00000002
++#define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004
++#define NDIS_PACKET_TYPE_BROADCAST 0x00000008
++#define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010
++#define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020
++#define NDIS_PACKET_TYPE_SMT 0x00000040
++#define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080
++#define NDIS_PACKET_TYPE_GROUP 0x00001000
++#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00002000
++#define NDIS_PACKET_TYPE_FUNCTIONAL 0x00004000
++#define NDIS_PACKET_TYPE_MAC_FRAME 0x00008000
++#define NDIS_PACKET_TYPE_NO_LOCAL 0x00010000
++
++#define NDIS_RING_SIGNAL_LOSS 0x00008000
++#define NDIS_RING_HARD_ERROR 0x00004000
++#define NDIS_RING_SOFT_ERROR 0x00002000
++#define NDIS_RING_TRANSMIT_BEACON 0x00001000
++#define NDIS_RING_LOBE_WIRE_FAULT 0x00000800
++#define NDIS_RING_AUTO_REMOVAL_ERROR 0x00000400
++#define NDIS_RING_REMOVE_RECEIVED 0x00000200
++#define NDIS_RING_COUNTER_OVERFLOW 0x00000100
++#define NDIS_RING_SINGLE_STATION 0x00000080
++#define NDIS_RING_RING_RECOVERY 0x00000040
++
++#define NDIS_PROT_OPTION_ESTIMATED_LENGTH 0x00000001
++#define NDIS_PROT_OPTION_NO_LOOPBACK 0x00000002
++#define NDIS_PROT_OPTION_NO_RSVD_ON_RCVPKT 0x00000004
++#define NDIS_PROT_OPTION_SEND_RESTRICTED 0x00000008
++
++#define NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA 0x00000001
++#define NDIS_MAC_OPTION_RECEIVE_SERIALIZED 0x00000002
++#define NDIS_MAC_OPTION_TRANSFERS_NOT_PEND 0x00000004
++#define NDIS_MAC_OPTION_NO_LOOPBACK 0x00000008
++
++#define NDIS_MAC_OPTION_FULL_DUPLEX 0x00000010
++
++#define NDIS_MAC_OPTION_EOTX_INDICATION 0x00000020
++#define NDIS_MAC_OPTION_8021P_PRIORITY 0x00000040
++#define NDIS_MAC_OPTION_SUPPORTS_MAC_ADDRESS_OVERWRITE 0x00000080
++#define NDIS_MAC_OPTION_RECEIVE_AT_DPC 0x00000100
++#define NDIS_MAC_OPTION_8021Q_VLAN 0x00000200
++#define NDIS_MAC_OPTION_RESERVED 0x80000000
++
++#define NDIS_MEDIA_CAP_TRANSMIT 0x00000001
++#define NDIS_MEDIA_CAP_RECEIVE 0x00000002
++
++#define NDIS_CO_MAC_OPTION_DYNAMIC_LINK_SPEED 0x00000001
++
++ typedef struct _NDIS_GUID {
++ GUID Guid;
++ _ANONYMOUS_UNION union {
++ NDIS_OID Oid;
++ NDIS_STATUS Status;
++ };
++ ULONG Size;
++ ULONG Flags;
++ } NDIS_GUID, *PNDIS_GUID;
++
++ typedef struct _NDIS_IRDA_PACKET_INFO {
++ ULONG ExtraBOFs;
++ ULONG MinTurnAroundTime;
++ } NDIS_IRDA_PACKET_INFO, *PNDIS_IRDA_PACKET_INFO;
++
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++#define NDIS_MAKE_NET_LUID(PNLUID, IFTYPE, NLUIDIDX) { (PNLUID)->Info.IfType = IFTYPE; (PNLUID)->Info.NetLuidIndex = NLUIDIDX; (PNLUID)->Info.Reserved = 0; }
++
++#define MAXIMUM_IP_OPER_STATUS_ADDRESS_FAMILIES_SUPPORTED 32
++
++#define NDIS_IF_MAX_STRING_SIZE IF_MAX_STRING_SIZE
++#define NDIS_MAX_PHYS_ADDRESS_LENGTH IF_MAX_PHYS_ADDRESS_LENGTH
++
++#define NDIS_LINK_STATE_XMIT_LINK_SPEED_AUTO_NEGOTIATED 0x00000001
++#define NDIS_LINK_STATE_RCV_LINK_SPEED_AUTO_NEGOTIATED 0x00000002
++#define NDIS_LINK_STATE_DUPLEX_AUTO_NEGOTIATED 0x00000004
++#define NDIS_LINK_STATE_PAUSE_FUNCTIONS_AUTO_NEGOTIATED 0x00000008
++
++#define NDIS_LINK_STATE_REVISION_1 1
++#define NDIS_LINK_PARAMETERS_REVISION_1 1
++#define NDIS_OPER_STATE_REVISION_1 1
++#define NDIS_IP_OPER_STATUS_INFO_REVISION_1 1
++#define NDIS_IP_OPER_STATE_REVISION_1 1
++
++#define NDIS_SIZEOF_LINK_STATE_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_LINK_STATE, AutoNegotiationFlags)
++#define NDIS_SIZEOF_LINK_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_LINK_PARAMETERS, AutoNegotiationFlags)
++#define NDIS_SIZEOF_OPER_STATE_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_OPER_STATE, OperationalStatusFlags)
++#define NDIS_SIZEOF_IP_OPER_STATUS_INFO_REVISION_1 FIELD_OFFSET (NDIS_IP_OPER_STATUS_INFO, IpOperationalStatus) + MAXIMUM_IP_OPER_STATUS_ADDRESS_FAMILIES_SUPPORTED *sizeof (NDIS_IP_OPER_STATUS)
++#define NDIS_SIZEOF_IP_OPER_STATE_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_IP_OPER_STATE, IpOperationalStatus)
++
++ typedef IF_COUNTED_STRING NDIS_IF_COUNTED_STRING, *PNDIS_IF_COUNTED_STRING;
++ typedef IF_PHYSICAL_ADDRESS NDIS_IF_PHYSICAL_ADDRESS, *PNDIS_IF_PHYSICAL_ADDRESS;
++ typedef NET_IF_MEDIA_CONNECT_STATE NDIS_MEDIA_CONNECT_STATE, *PNDIS_MEDIA_CONNECT_STATE;
++ typedef NET_IF_MEDIA_DUPLEX_STATE NDIS_MEDIA_DUPLEX_STATE, *PNDIS_MEDIA_DUPLEX_STATE;
++
++ typedef enum _NDIS_SUPPORTED_PAUSE_FUNCTIONS {
++ NdisPauseFunctionsUnsupported,
++ NdisPauseFunctionsSendOnly,
++ NdisPauseFunctionsReceiveOnly,
++ NdisPauseFunctionsSendAndReceive,
++ NdisPauseFunctionsUnknown
++ } NDIS_SUPPORTED_PAUSE_FUNCTIONS, *PNDIS_SUPPORTED_PAUSE_FUNCTIONS;
++
++ typedef struct _NDIS_LINK_STATE {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_MEDIA_CONNECT_STATE MediaConnectState;
++ NDIS_MEDIA_DUPLEX_STATE MediaDuplexState;
++ ULONG64 XmitLinkSpeed;
++ ULONG64 RcvLinkSpeed;
++ NDIS_SUPPORTED_PAUSE_FUNCTIONS PauseFunctions;
++ ULONG AutoNegotiationFlags;
++ } NDIS_LINK_STATE, *PNDIS_LINK_STATE;
++
++ typedef struct _NDIS_LINK_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_MEDIA_DUPLEX_STATE MediaDuplexState;
++ ULONG64 XmitLinkSpeed;
++ ULONG64 RcvLinkSpeed;
++ NDIS_SUPPORTED_PAUSE_FUNCTIONS PauseFunctions;
++ ULONG AutoNegotiationFlags;
++ } NDIS_LINK_PARAMETERS, *PNDIS_LINK_PARAMETERS;
++
++ typedef struct _NDIS_OPER_STATE {
++ NDIS_OBJECT_HEADER Header;
++ NET_IF_OPER_STATUS OperationalStatus;
++ ULONG OperationalStatusFlags;
++ } NDIS_OPER_STATE, *PNDIS_OPER_STATE;
++
++ typedef struct _NDIS_IP_OPER_STATUS {
++ ULONG AddressFamily;
++ NET_IF_OPER_STATUS OperationalStatus;
++ ULONG OperationalStatusFlags;
++ } NDIS_IP_OPER_STATUS, *PNDIS_IP_OPER_STATUS;
++
++ typedef struct _NDIS_IP_OPER_STATUS_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG NumberofAddressFamiliesReturned;
++ NDIS_IP_OPER_STATUS IpOperationalStatus[MAXIMUM_IP_OPER_STATUS_ADDRESS_FAMILIES_SUPPORTED];
++ } NDIS_IP_OPER_STATUS_INFO, *PNDIS_IP_OPER_STATUS_INFO;
++
++ typedef struct _NDIS_IP_OPER_STATE {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_IP_OPER_STATUS IpOperationalStatus;
++ } NDIS_IP_OPER_STATE, *PNDIS_IP_OPER_STATE;
++
++#define NDIS_OFFLOAD_PARAMETERS_NO_CHANGE 0
++#define NDIS_OFFLOAD_PARAMETERS_TX_RX_DISABLED 1
++#define NDIS_OFFLOAD_PARAMETERS_TX_ENABLED_RX_DISABLED 2
++#define NDIS_OFFLOAD_PARAMETERS_RX_ENABLED_TX_DISABLED 3
++#define NDIS_OFFLOAD_PARAMETERS_TX_RX_ENABLED 4
++
++#define NDIS_OFFLOAD_PARAMETERS_LSOV1_DISABLED 1
++#define NDIS_OFFLOAD_PARAMETERS_LSOV1_ENABLED 2
++
++#define NDIS_OFFLOAD_PARAMETERS_IPSECV1_DISABLED 1
++#define NDIS_OFFLOAD_PARAMETERS_IPSECV1_AH_ENABLED 2
++#define NDIS_OFFLOAD_PARAMETERS_IPSECV1_ESP_ENABLED 3
++#define NDIS_OFFLOAD_PARAMETERS_IPSECV1_AH_AND_ESP_ENABLED 4
++
++#define NDIS_OFFLOAD_PARAMETERS_LSOV2_DISABLED 1
++#define NDIS_OFFLOAD_PARAMETERS_LSOV2_ENABLED 2
++
++#if NDIS_SUPPORT_NDIS61
++#define NDIS_OFFLOAD_PARAMETERS_IPSECV2_DISABLED 1
++#define NDIS_OFFLOAD_PARAMETERS_IPSECV2_AH_ENABLED 2
++#define NDIS_OFFLOAD_PARAMETERS_IPSECV2_ESP_ENABLED 3
++#define NDIS_OFFLOAD_PARAMETERS_IPSECV2_AH_AND_ESP_ENABLED 4
++#endif
++
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_OFFLOAD_PARAMETERS_RSC_DISABLED 1
++#define NDIS_OFFLOAD_PARAMETERS_RSC_ENABLED 2
++
++#define NDIS_ENCAPSULATION_TYPE_GRE_MAC 0x00000001
++#define NDIS_ENCAPSULATION_TYPE_MAX NDIS_ENCAPSULATION_TYPE_GRE_MAC
++#endif
++
++#define NDIS_OFFLOAD_PARAMETERS_CONNECTION_OFFLOAD_DISABLED 1
++#define NDIS_OFFLOAD_PARAMETERS_CONNECTION_OFFLOAD_ENABLED 2
++
++#define NDIS_OFFLOAD_PARAMETERS_REVISION_1 1
++#if NDIS_SUPPORT_NDIS61
++#define NDIS_OFFLOAD_PARAMETERS_REVISION_2 2
++#endif
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_OFFLOAD_PARAMETERS_REVISION_3 3
++#define NDIS_OFFLOAD_PARAMETERS_SKIP_REGISTRY_UPDATE 0x00000001
++#endif
++
++ typedef struct _NDIS_OFFLOAD_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ UCHAR IPv4Checksum;
++ UCHAR TCPIPv4Checksum;
++ UCHAR UDPIPv4Checksum;
++ UCHAR TCPIPv6Checksum;
++ UCHAR UDPIPv6Checksum;
++ UCHAR LsoV1;
++ UCHAR IPsecV1;
++ UCHAR LsoV2IPv4;
++ UCHAR LsoV2IPv6;
++ UCHAR TcpConnectionIPv4;
++ UCHAR TcpConnectionIPv6;
++ ULONG Flags;
++#if NDIS_SUPPORT_NDIS61
++ UCHAR IPsecV2;
++ UCHAR IPsecV2IPv4;
++#endif
++#if NDIS_SUPPORT_NDIS630
++ _ANONYMOUS_STRUCT struct {
++ UCHAR RscIPv4;
++ UCHAR RscIPv6;
++ };
++#endif
++#if NDIS_SUPPORT_NDIS630
++ _ANONYMOUS_STRUCT struct {
++ UCHAR EncapsulatedPacketTaskOffload;
++ UCHAR EncapsulationTypes;
++ };
++#endif
++ } NDIS_OFFLOAD_PARAMETERS, *PNDIS_OFFLOAD_PARAMETERS;
++
++#define NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_OFFLOAD_PARAMETERS, Flags)
++#if NDIS_SUPPORT_NDIS61
++#define NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_OFFLOAD_PARAMETERS, IPsecV2IPv4)
++#endif
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_SIZEOF_OFFLOAD_PARAMETERS_REVISION_3 RTL_SIZEOF_THROUGH_FIELD (NDIS_OFFLOAD_PARAMETERS, EncapsulationTypes)
++#endif
++
++#define NDIS_OFFLOAD_NOT_SUPPORTED 0
++#define NDIS_OFFLOAD_SUPPORTED 1
++
++#define NDIS_OFFLOAD_SET_NO_CHANGE 0
++#define NDIS_OFFLOAD_SET_ON 1
++#define NDIS_OFFLOAD_SET_OFF 2
++
++#define NDIS_ENCAPSULATION_NOT_SUPPORTED 0x00000000
++#define NDIS_ENCAPSULATION_NULL 0x00000001
++#define NDIS_ENCAPSULATION_IEEE_802_3 0x00000002
++#define NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q 0x00000004
++#define NDIS_ENCAPSULATION_IEEE_802_3_P_AND_Q_IN_OOB 0x00000008
++#define NDIS_ENCAPSULATION_IEEE_LLC_SNAP_ROUTED 0x00000010
++
++ typedef struct _NDIS_TCP_LARGE_SEND_OFFLOAD_V1 {
++ struct {
++ ULONG Encapsulation;
++ ULONG MaxOffLoadSize;
++ ULONG MinSegmentCount;
++ ULONG TcpOptions:2;
++ ULONG IpOptions:2;
++ } IPv4;
++ } NDIS_TCP_LARGE_SEND_OFFLOAD_V1, *PNDIS_TCP_LARGE_SEND_OFFLOAD_V1;
++
++ typedef struct _NDIS_TCP_IP_CHECKSUM_OFFLOAD {
++ struct {
++ ULONG Encapsulation;
++ ULONG IpOptionsSupported:2;
++ ULONG TcpOptionsSupported:2;
++ ULONG TcpChecksum:2;
++ ULONG UdpChecksum:2;
++ ULONG IpChecksum:2;
++ } IPv4Transmit;
++ struct {
++ ULONG Encapsulation;
++ ULONG IpOptionsSupported:2;
++ ULONG TcpOptionsSupported:2;
++ ULONG TcpChecksum:2;
++ ULONG UdpChecksum:2;
++ ULONG IpChecksum:2;
++ } IPv4Receive;
++ struct {
++ ULONG Encapsulation;
++ ULONG IpExtensionHeadersSupported:2;
++ ULONG TcpOptionsSupported:2;
++ ULONG TcpChecksum:2;
++ ULONG UdpChecksum:2;
++ } IPv6Transmit;
++ struct {
++ ULONG Encapsulation;
++ ULONG IpExtensionHeadersSupported:2;
++ ULONG TcpOptionsSupported:2;
++ ULONG TcpChecksum:2;
++ ULONG UdpChecksum:2;
++ } IPv6Receive;
++ } NDIS_TCP_IP_CHECKSUM_OFFLOAD, *PNDIS_TCP_IP_CHECKSUM_OFFLOAD;
++ typedef struct _NDIS_IPSEC_OFFLOAD_V1 {
++ struct {
++ ULONG Encapsulation;
++ ULONG AhEspCombined;
++ ULONG TransportTunnelCombined;
++ ULONG IPv4Options;
++ ULONG Flags;
++ } Supported;
++ struct {
++ ULONG Md5 : 2;
++ ULONG Sha_1 : 2;
++ ULONG Transport : 2;
++ ULONG Tunnel : 2;
++ ULONG Send : 2;
++ ULONG Receive : 2;
++ } IPv4AH;
++ struct {
++ ULONG Des : 2;
++ ULONG Reserved : 2;
++ ULONG TripleDes : 2;
++ ULONG NullEsp : 2;
++ ULONG Transport : 2;
++ ULONG Tunnel : 2;
++ ULONG Send : 2;
++ ULONG Receive : 2;
++ } IPv4ESP;
++ } NDIS_IPSEC_OFFLOAD_V1, *PNDIS_IPSEC_OFFLOAD_V1;
++
++ typedef struct _NDIS_TCP_LARGE_SEND_OFFLOAD_V2 {
++ struct {
++ ULONG Encapsulation;
++ ULONG MaxOffLoadSize;
++ ULONG MinSegmentCount;
++ }IPv4;
++ struct {
++ ULONG Encapsulation;
++ ULONG MaxOffLoadSize;
++ ULONG MinSegmentCount;
++ ULONG IpExtensionHeadersSupported:2;
++ ULONG TcpOptionsSupported:2;
++ } IPv6;
++ } NDIS_TCP_LARGE_SEND_OFFLOAD_V2, *PNDIS_TCP_LARGE_SEND_OFFLOAD_V2;
++
++#if NDIS_SUPPORT_NDIS61
++#define IPSEC_OFFLOAD_V2_AUTHENTICATION_MD5 0x00000001
++#define IPSEC_OFFLOAD_V2_AUTHENTICATION_SHA_1 0x00000002
++#define IPSEC_OFFLOAD_V2_AUTHENTICATION_SHA_256 0x00000004
++#define IPSEC_OFFLOAD_V2_AUTHENTICATION_AES_GCM_128 0x00000008
++#define IPSEC_OFFLOAD_V2_AUTHENTICATION_AES_GCM_192 0x00000010
++#define IPSEC_OFFLOAD_V2_AUTHENTICATION_AES_GCM_256 0x00000020
++
++#define IPSEC_OFFLOAD_V2_ENCRYPTION_NONE 0x00000001
++#define IPSEC_OFFLOAD_V2_ENCRYPTION_DES_CBC 0x00000002
++#define IPSEC_OFFLOAD_V2_ENCRYPTION_3_DES_CBC 0x00000004
++#define IPSEC_OFFLOAD_V2_ENCRYPTION_AES_GCM_128 0x00000008
++#define IPSEC_OFFLOAD_V2_ENCRYPTION_AES_GCM_192 0x00000010
++#define IPSEC_OFFLOAD_V2_ENCRYPTION_AES_GCM_256 0x00000020
++#define IPSEC_OFFLOAD_V2_ENCRYPTION_AES_CBC_128 0x00000040
++#define IPSEC_OFFLOAD_V2_ENCRYPTION_AES_CBC_192 0x00000080
++#define IPSEC_OFFLOAD_V2_ENCRYPTION_AES_CBC_256 0x00000100
++
++ typedef struct _NDIS_IPSEC_OFFLOAD_V2 {
++ ULONG Encapsulation;
++ BOOLEAN IPv6Supported;
++ BOOLEAN IPv4Options;
++ BOOLEAN IPv6NonIPsecExtensionHeaders;
++ BOOLEAN Ah;
++ BOOLEAN Esp;
++ BOOLEAN AhEspCombined;
++ BOOLEAN Transport;
++ BOOLEAN Tunnel;
++ BOOLEAN TransportTunnelCombined;
++ BOOLEAN LsoSupported;
++ BOOLEAN ExtendedSequenceNumbers;
++ ULONG UdpEsp;
++ ULONG AuthenticationAlgorithms;
++ ULONG EncryptionAlgorithms;
++ ULONG SaOffloadCapacity;
++ } NDIS_IPSEC_OFFLOAD_V2, *PNDIS_IPSEC_OFFLOAD_V2;
++#endif
++
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_NOT_SUPPORTED 0x00000000
++#define NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_INNER_IPV4 0x00000001
++#define NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_OUTER_IPV4 0x00000002
++#define NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_INNER_IPV6 0x00000004
++#define NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD_OUTER_IPV6 0x00000008
++#endif
++
++#define NDIS_OFFLOAD_FLAGS_GROUP_CHECKSUM_CAPABILITIES 0x1
++#if NDIS_SUPPORT_NDIS630
++#define IPSEC_OFFLOAD_V2_AND_TCP_CHECKSUM_COEXISTENCE 0x2
++#define IPSEC_OFFLOAD_V2_AND_UDP_CHECKSUM_COEXISTENCE 0x4
++#endif
++
++#define NDIS_MAXIMUM_PORTS 0x1000000
++
++#define NDIS_DEFAULT_PORT_NUMBER ((NDIS_PORT_NUMBER) 0)
++
++#define NDIS_WMI_DEFAULT_METHOD_ID 1
++
++#define NDIS_WMI_OBJECT_TYPE_SET 0x01
++#define NDIS_WMI_OBJECT_TYPE_METHOD 0x02
++#define NDIS_WMI_OBJECT_TYPE_EVENT 0x03
++#define NDIS_WMI_OBJECT_TYPE_ENUM_ADAPTER 0x04
++#define NDIS_WMI_OBJECT_TYPE_OUTPUT_INFO 0x05
++
++#define NDIS_DEVICE_TYPE_ENDPOINT 0x00000001
++
++#define NDIS_OFFLOAD_REVISION_1 1
++#define NDIS_TCP_CONNECTION_OFFLOAD_REVISION_1 1
++#define NDIS_PORT_AUTHENTICATION_PARAMETERS_REVISION_1 1
++#define NDIS_WMI_METHOD_HEADER_REVISION_1 1
++#define NDIS_WMI_SET_HEADER_REVISION_1 1
++#define NDIS_WMI_EVENT_HEADER_REVISION_1 1
++#define NDIS_WMI_ENUM_ADAPTER_REVISION_1 1
++#if NDIS_SUPPORT_NDIS61
++#define NDIS_TCP_CONNECTION_OFFLOAD_REVISION_2 2
++#define NDIS_OFFLOAD_REVISION_2 2
++#endif
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_OFFLOAD_REVISION_3 3
++#define NDIS_TCP_RECV_SEG_COALESC_OFFLOAD_REVISION_1 1
++#endif
++
++#define NDIS_SIZEOF_NDIS_OFFLOAD_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_OFFLOAD, Flags)
++#define NDIS_SIZEOF_NDIS_WMI_OFFLOAD_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_OFFLOAD, Flags)
++#define NDIS_SIZEOF_TCP_CONNECTION_OFFLOAD_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_TCP_CONNECTION_OFFLOAD, Flags)
++#define NDIS_SIZEOF_WMI_TCP_CONNECTION_OFFLOAD_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_TCP_CONNECTION_OFFLOAD, Flags)
++#define NDIS_SIZEOF_PORT_AUTHENTICATION_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_PORT_AUTHENTICATION_PARAMETERS, RcvAuthorizationState)
++#define NDIS_SIZEOF_WMI_METHOD_HEADER_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_METHOD_HEADER, Padding)
++#define NDIS_SIZEOF_WMI_SET_HEADER_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_SET_HEADER, Padding)
++#define NDIS_SIZEOF_WMI_EVENT_HEADER_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_EVENT_HEADER, Padding)
++#define NDIS_SIZEOF_WMI_ENUM_ADAPTER_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_ENUM_ADAPTER, DeviceName)
++#if NDIS_SUPPORT_NDIS61
++#define NDIS_SIZEOF_TCP_CONNECTION_OFFLOAD_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_TCP_CONNECTION_OFFLOAD, Flags)
++#define NDIS_SIZEOF_NDIS_WMI_OFFLOAD_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_OFFLOAD, IPsecV2)
++#define NDIS_SIZEOF_NDIS_OFFLOAD_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_OFFLOAD, IPsecV2)
++#endif
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_SIZEOF_NDIS_WMI_OFFLOAD_REVISION_3 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_OFFLOAD, EncapsulatedPacketTaskOffloadGre)
++#define NDIS_SIZEOF_NDIS_OFFLOAD_REVISION_3 RTL_SIZEOF_THROUGH_FIELD (NDIS_OFFLOAD, EncapsulatedPacketTaskOffloadGre)
++#define NDIS_SIZEOF_TCP_RECV_SEG_COALESC_OFFLOAD_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_TCP_RECV_SEG_COALESCE_OFFLOAD, IPv6.Enabled)
++#define NDIS_SIZEOF_ENCAPSULATED_PACKET_TASK_OFFLOAD_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD, MaxHeaderSizeSupported)
++#endif
++
++#if NDIS_SUPPORT_NDIS630
++ typedef struct _NDIS_TCP_RECV_SEG_COALESCE_OFFLOAD {
++ struct {
++ BOOLEAN Enabled;
++ } IPv4;
++ struct {
++ BOOLEAN Enabled;
++ } IPv6;
++ } NDIS_TCP_RECV_SEG_COALESCE_OFFLOAD, *PNDIS_TCP_RECV_SEG_COALESCE_OFFLOAD;
++
++ typedef struct _NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD {
++ ULONG TransmitChecksumOffloadSupported:4;
++ ULONG ReceiveChecksumOffloadSupported:4;
++ ULONG LsoV2Supported:4;
++ ULONG RssSupported:4;
++ ULONG VmqSupported:4;
++ ULONG MaxHeaderSizeSupported;
++ } NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD, *PNDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD;
++#endif
++
++ typedef struct _NDIS_OFFLOAD {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_TCP_IP_CHECKSUM_OFFLOAD Checksum;
++ NDIS_TCP_LARGE_SEND_OFFLOAD_V1 LsoV1;
++ NDIS_IPSEC_OFFLOAD_V1 IPsecV1;
++ NDIS_TCP_LARGE_SEND_OFFLOAD_V2 LsoV2;
++ ULONG Flags;
++#if NDIS_SUPPORT_NDIS61
++ NDIS_IPSEC_OFFLOAD_V2 IPsecV2;
++#endif
++#if NDIS_SUPPORT_NDIS630
++ NDIS_TCP_RECV_SEG_COALESCE_OFFLOAD Rsc;
++ NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD EncapsulatedPacketTaskOffloadGre;
++#endif
++ } NDIS_OFFLOAD, *PNDIS_OFFLOAD;
++
++ typedef struct _NDIS_WMI_TCP_LARGE_SEND_OFFLOAD_V1 {
++ struct {
++ ULONG Encapsulation;
++ ULONG MaxOffLoadSize;
++ ULONG MinSegmentCount;
++ ULONG TcpOptions;
++ ULONG IpOptions;
++ } IPv4;
++ } NDIS_WMI_TCP_LARGE_SEND_OFFLOAD_V1, *PNDIS_WMI_TCP_LARGE_SEND_OFFLOAD_V1;
++
++ typedef struct _NDIS_WMI_TCP_IP_CHECKSUM_OFFLOAD {
++ struct {
++ ULONG Encapsulation;
++ ULONG IpOptionsSupported;
++ ULONG TcpOptionsSupported;
++ ULONG TcpChecksum;
++ ULONG UdpChecksum;
++ ULONG IpChecksum;
++ } IPv4Transmit;
++ struct {
++ ULONG Encapsulation;
++ ULONG IpOptionsSupported;
++ ULONG TcpOptionsSupported;
++ ULONG TcpChecksum;
++ ULONG UdpChecksum;
++ ULONG IpChecksum;
++ } IPv4Receive;
++ struct {
++ ULONG Encapsulation;
++ ULONG IpExtensionHeadersSupported;
++ ULONG TcpOptionsSupported;
++ ULONG TcpChecksum;
++ ULONG UdpChecksum;
++ } IPv6Transmit;
++ struct {
++ ULONG Encapsulation;
++ ULONG IpExtensionHeadersSupported;
++ ULONG TcpOptionsSupported;
++ ULONG TcpChecksum;
++ ULONG UdpChecksum;
++ } IPv6Receive;
++ } NDIS_WMI_TCP_IP_CHECKSUM_OFFLOAD, *PNDIS_WMI_TCP_IP_CHECKSUM_OFFLOAD;
++
++ typedef struct _NDIS_WMI_IPSEC_OFFLOAD_V1 {
++ struct {
++ ULONG Encapsulation;
++ ULONG AhEspCombined;
++ ULONG TransportTunnelCombined;
++ ULONG IPv4Options;
++ ULONG Flags;
++ } Supported;
++ struct {
++ ULONG Md5;
++ ULONG Sha_1;
++ ULONG Transport;
++ ULONG Tunnel;
++ ULONG Send;
++ ULONG Receive;
++ } IPv4AH;
++ struct {
++ ULONG Des;
++ ULONG Reserved;
++ ULONG TripleDes;
++ ULONG NullEsp;
++ ULONG Transport;
++ ULONG Tunnel;
++ ULONG Send;
++ ULONG Receive;
++ } IPv4ESP;
++ } NDIS_WMI_IPSEC_OFFLOAD_V1, *PNDIS_WMI_IPSEC_OFFLOAD_V1;
++
++ typedef struct _NDIS_WMI_TCP_LARGE_SEND_OFFLOAD_V2 {
++ struct {
++ ULONG Encapsulation;
++ ULONG MaxOffLoadSize;
++ ULONG MinSegmentCount;
++ } IPv4;
++ struct {
++ ULONG Encapsulation;
++ ULONG MaxOffLoadSize;
++ ULONG MinSegmentCount;
++ ULONG IpExtensionHeadersSupported;
++ ULONG TcpOptionsSupported;
++ } IPv6;
++ } NDIS_WMI_TCP_LARGE_SEND_OFFLOAD_V2, *PNDIS_WMI_TCP_LARGE_SEND_OFFLOAD_V2;
++
++ typedef struct _NDIS_WMI_OFFLOAD {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_WMI_TCP_IP_CHECKSUM_OFFLOAD Checksum;
++ NDIS_WMI_TCP_LARGE_SEND_OFFLOAD_V1 LsoV1;
++ NDIS_WMI_IPSEC_OFFLOAD_V1 IPsecV1;
++ NDIS_WMI_TCP_LARGE_SEND_OFFLOAD_V2 LsoV2;
++ ULONG Flags;
++#if NDIS_SUPPORT_NDIS61
++ NDIS_IPSEC_OFFLOAD_V2 IPsecV2;
++#endif
++#if NDIS_SUPPORT_NDIS630
++ NDIS_TCP_RECV_SEG_COALESCE_OFFLOAD Rsc;
++ NDIS_ENCAPSULATED_PACKET_TASK_OFFLOAD EncapsulatedPacketTaskOffloadGre;
++#endif
++ } NDIS_WMI_OFFLOAD, *PNDIS_WMI_OFFLOAD;
++
++ typedef struct _NDIS_TCP_CONNECTION_OFFLOAD {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Encapsulation;
++ ULONG SupportIPv4:2;
++ ULONG SupportIPv6:2;
++ ULONG SupportIPv6ExtensionHeaders:2;
++ ULONG SupportSack:2;
++#if NDIS_SUPPORT_NDIS61
++ ULONG CongestionAlgorithm:4;
++#endif
++ ULONG TcpConnectionOffloadCapacity;
++ ULONG Flags;
++ } NDIS_TCP_CONNECTION_OFFLOAD, *PNDIS_TCP_CONNECTION_OFFLOAD;
++
++ typedef struct _NDIS_WMI_TCP_CONNECTION_OFFLOAD {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Encapsulation;
++ ULONG SupportIPv4;
++ ULONG SupportIPv6;
++ ULONG SupportIPv6ExtensionHeaders;
++ ULONG SupportSack;
++ ULONG TcpConnectionOffloadCapacity;
++ ULONG Flags;
++ } NDIS_WMI_TCP_CONNECTION_OFFLOAD, *PNDIS_WMI_TCP_CONNECTION_OFFLOAD;
++
++ typedef ULONG NDIS_PORT_NUMBER, *PNDIS_PORT_NUMBER;
++
++ typedef enum _NDIS_PORT_TYPE {
++ NdisPortTypeUndefined,
++ NdisPortTypeBridge,
++ NdisPortTypeRasConnection,
++ NdisPortType8021xSupplicant,
++#if NDIS_SUPPORT_NDIS630
++ NdisPortTypeNdisImPlatform,
++#endif
++ NdisPortTypeMax,
++ } NDIS_PORT_TYPE, *PNDIS_PORT_TYPE;
++
++ typedef enum _NDIS_PORT_AUTHORIZATION_STATE {
++ NdisPortAuthorizationUnknown,
++ NdisPortAuthorized,
++ NdisPortUnauthorized,
++ NdisPortReauthorizing
++ } NDIS_PORT_AUTHORIZATION_STATE, *PNDIS_PORT_AUTHORIZATION_STATE;
++
++ typedef enum _NDIS_PORT_CONTROL_STATE {
++ NdisPortControlStateUnknown,
++ NdisPortControlStateControlled,
++ NdisPortControlStateUncontrolled
++ } NDIS_PORT_CONTROL_STATE, *PNDIS_PORT_CONTROL_STATE;
++
++ typedef NDIS_PORT_CONTROL_STATE NDIS_PORT_CONTROLL_STATE;
++ typedef PNDIS_PORT_CONTROL_STATE PNDIS_PORT_CONTROLL_STATE;
++
++ typedef struct _NDIS_PORT_AUTHENTICATION_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_PORT_CONTROL_STATE SendControlState;
++ NDIS_PORT_CONTROL_STATE RcvControlState;
++ NDIS_PORT_AUTHORIZATION_STATE SendAuthorizationState;
++ NDIS_PORT_AUTHORIZATION_STATE RcvAuthorizationState;
++ } NDIS_PORT_AUTHENTICATION_PARAMETERS, *PNDIS_PORT_AUTHENTICATION_PARAMETERS;
++
++ typedef enum _NDIS_NETWORK_CHANGE_TYPE {
++ NdisPossibleNetworkChange = 1,
++ NdisDefinitelyNetworkChange,
++ NdisNetworkChangeFromMediaConnect,
++ NdisNetworkChangeMax
++ } NDIS_NETWORK_CHANGE_TYPE, *PNDIS_NETWORK_CHANGE_TYPE;
++
++ typedef struct _NDIS_WMI_METHOD_HEADER {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_PORT_NUMBER PortNumber;
++ NET_LUID NetLuid;
++ ULONG64 RequestId;
++ ULONG Timeout;
++ UCHAR Padding[4];
++ } NDIS_WMI_METHOD_HEADER, *PNDIS_WMI_METHOD_HEADER;
++
++ typedef struct _NDIS_WMI_SET_HEADER {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_PORT_NUMBER PortNumber;
++ NET_LUID NetLuid;
++ ULONG64 RequestId;
++ ULONG Timeout;
++ UCHAR Padding[4];
++ } NDIS_WMI_SET_HEADER, *PNDIS_WMI_SET_HEADER;
++
++ typedef struct _NDIS_WMI_EVENT_HEADER {
++ NDIS_OBJECT_HEADER Header;
++ NET_IFINDEX IfIndex;
++ NET_LUID NetLuid;
++ ULONG64 RequestId;
++ NDIS_PORT_NUMBER PortNumber;
++ ULONG DeviceNameLength;
++ ULONG DeviceNameOffset;
++ UCHAR Padding[4];
++ } NDIS_WMI_EVENT_HEADER, *PNDIS_WMI_EVENT_HEADER;
++
++ typedef struct _NDIS_WMI_ENUM_ADAPTER {
++ NDIS_OBJECT_HEADER Header;
++ NET_IFINDEX IfIndex;
++ NET_LUID NetLuid;
++ USHORT DeviceNameLength;
++ CHAR DeviceName[1];
++ } NDIS_WMI_ENUM_ADAPTER, *PNDIS_WMI_ENUM_ADAPTER;
++
++#if NDIS_SUPPORT_NDIS61
++#define NDIS_HD_SPLIT_COMBINE_ALL_HEADERS 0x00000001
++
++#define NDIS_HD_SPLIT_CAPS_SUPPORTS_HEADER_DATA_SPLIT 0x00000001
++#define NDIS_HD_SPLIT_CAPS_SUPPORTS_IPV4_OPTIONS 0x00000002
++#define NDIS_HD_SPLIT_CAPS_SUPPORTS_IPV6_EXTENSION_HEADERS 0x00000004
++#define NDIS_HD_SPLIT_CAPS_SUPPORTS_TCP_OPTIONS 0x00000008
++
++#define NDIS_HD_SPLIT_ENABLE_HEADER_DATA_SPLIT 0x00000001
++
++#define NDIS_HD_SPLIT_PARAMETERS_REVISION_1 1
++#define NDIS_HD_SPLIT_CURRENT_CONFIG_REVISION_1 1
++
++#define NDIS_SIZEOF_HD_SPLIT_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_HD_SPLIT_PARAMETERS, HDSplitCombineFlags)
++#define NDIS_SIZEOF_HD_SPLIT_CURRENT_CONFIG_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_HD_SPLIT_CURRENT_CONFIG, MaxHeaderSize)
++
++ typedef struct _NDIS_HD_SPLIT_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG HDSplitCombineFlags;
++ } NDIS_HD_SPLIT_PARAMETERS, *PNDIS_HD_SPLIT_PARAMETERS;
++
++ typedef struct _NDIS_HD_SPLIT_CURRENT_CONFIG {
++ NDIS_OBJECT_HEADER Header;
++ ULONG HardwareCapabilities;
++ ULONG CurrentCapabilities;
++ ULONG HDSplitFlags;
++ ULONG HDSplitCombineFlags;
++ ULONG BackfillSize;
++ ULONG MaxHeaderSize;
++ } NDIS_HD_SPLIT_CURRENT_CONFIG, *PNDIS_HD_SPLIT_CURRENT_CONFIG;
++#endif
++
++#define NDIS_WMI_OUTPUT_INFO_REVISION_1 1
++
++ typedef struct NDIS_WMI_OUTPUT_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ UCHAR SupportedRevision;
++ ULONG DataOffset;
++ } NDIS_WMI_OUTPUT_INFO, *PNDIS_WMI_OUTPUT_INFO;
++
++#if NDIS_SUPPORT_NDIS620
++#define NDIS_PM_WOL_BITMAP_PATTERN_SUPPORTED 0x00000001
++#define NDIS_PM_WOL_MAGIC_PACKET_SUPPORTED 0x00000002
++#define NDIS_PM_WOL_IPV4_TCP_SYN_SUPPORTED 0x00000004
++#define NDIS_PM_WOL_IPV6_TCP_SYN_SUPPORTED 0x00000008
++#define NDIS_PM_WOL_IPV4_DEST_ADDR_WILDCARD_SUPPORTED 0x00000200
++#define NDIS_PM_WOL_IPV6_DEST_ADDR_WILDCARD_SUPPORTED 0x00000800
++#define NDIS_PM_WOL_EAPOL_REQUEST_ID_MESSAGE_SUPPORTED 0x00010000
++
++#define NDIS_PM_PROTOCOL_OFFLOAD_ARP_SUPPORTED 0x00000001
++#define NDIS_PM_PROTOCOL_OFFLOAD_NS_SUPPORTED 0x00000002
++#define NDIS_PM_PROTOCOL_OFFLOAD_80211_RSN_REKEY_SUPPORTED 0x00000080
++
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_PM_WAKE_ON_MEDIA_CONNECT_SUPPORTED 0x00000001
++#define NDIS_PM_WAKE_ON_MEDIA_DISCONNECT_SUPPORTED 0x00000002
++
++#define NDIS_WLAN_WAKE_ON_NLO_DISCOVERY_SUPPORTED 0x00000001
++#define NDIS_WLAN_WAKE_ON_AP_ASSOCIATION_LOST_SUPPORTED 0x00000002
++#define NDIS_WLAN_WAKE_ON_GTK_HANDSHAKE_ERROR_SUPPORTED 0x00000004
++#define NDIS_WLAN_WAKE_ON_4WAY_HANDSHAKE_REQUEST_SUPPORTED 0x00000008
++
++#define NDIS_WWAN_WAKE_ON_REGISTER_STATE_SUPPORTED 0x00000001
++#define NDIS_WWAN_WAKE_ON_SMS_RECEIVE_SUPPORTED 0x00000002
++#define NDIS_WWAN_WAKE_ON_USSD_RECEIVE_SUPPORTED 0x00000004
++
++#define NDIS_PM_WAKE_PACKET_INDICATION_SUPPORTED 0x00000001
++#define NDIS_PM_SELECTIVE_SUSPEND_SUPPORTED 0x00000002
++#endif
++
++#define NDIS_PM_WOL_BITMAP_PATTERN_ENABLED 0x00000001
++#define NDIS_PM_WOL_MAGIC_PACKET_ENABLED 0x00000002
++#define NDIS_PM_WOL_IPV4_TCP_SYN_ENABLED 0x00000004
++#define NDIS_PM_WOL_IPV6_TCP_SYN_ENABLED 0x00000008
++#define NDIS_PM_WOL_IPV4_DEST_ADDR_WILDCARD_ENABLED 0x00000200
++#define NDIS_PM_WOL_IPV6_DEST_ADDR_WILDCARD_ENABLED 0x00000800
++#define NDIS_PM_WOL_EAPOL_REQUEST_ID_MESSAGE_ENABLED 0x00010000
++
++#define NDIS_PM_PROTOCOL_OFFLOAD_ARP_ENABLED 0x00000001
++#define NDIS_PM_PROTOCOL_OFFLOAD_NS_ENABLED 0x00000002
++#define NDIS_PM_PROTOCOL_OFFLOAD_80211_RSN_REKEY_ENABLED 0x00000080
++
++#define NDIS_PM_WAKE_ON_LINK_CHANGE_ENABLED 0x1
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_PM_WAKE_ON_MEDIA_DISCONNECT_ENABLED 0x2
++#define NDIS_PM_SELECTIVE_SUSPEND_ENABLED 0x10
++
++#define NDIS_WLAN_WAKE_ON_NLO_DISCOVERY_ENABLED 0x1
++#define NDIS_WLAN_WAKE_ON_AP_ASSOCIATION_LOST_ENABLED 0x2
++#define NDIS_WLAN_WAKE_ON_GTK_HANDSHAKE_ERROR_ENABLED 0x4
++#define NDIS_WLAN_WAKE_ON_4WAY_HANDSHAKE_REQUEST_ENABLED 0x8
++
++#define NDIS_WWAN_WAKE_ON_REGISTER_STATE_ENABLED 0x1
++#define NDIS_WWAN_WAKE_ON_SMS_RECEIVE_ENABLED 0x2
++#define NDIS_WWAN_WAKE_ON_USSD_RECEIVE_ENABLED 0x4
++#endif
++
++#define NDIS_PM_WOL_PRIORITY_LOWEST 0xffffffff
++#define NDIS_PM_WOL_PRIORITY_NORMAL 0x10000000
++#define NDIS_PM_WOL_PRIORITY_HIGHEST 0x00000001
++
++#define NDIS_PM_PROTOCOL_OFFLOAD_PRIORITY_LOWEST 0xffffffff
++#define NDIS_PM_PROTOCOL_OFFLOAD_PRIORITY_NORMAL 0x10000000
++#define NDIS_PM_PROTOCOL_OFFLOAD_PRIORITY_HIGHEST 0x00000001
++
++#define NDIS_PM_MAX_STRING_SIZE 64
++
++#define EAPOL_REQUEST_ID_WOL_FLAG_MUST_ENCRYPT 0x00000001
++
++#define NDIS_PM_MAX_PATTERN_ID 0x0000ffff
++
++#define NDIS_PM_PRIVATE_PATTERN_ID 0x00000001
++
++#define DOT11_RSN_KEK_LENGTH 16
++#define DOT11_RSN_KCK_LENGTH 16
++
++
++#define NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED 0x00000001
++#define NDIS_RECEIVE_FILTER_IPV4_HEADER_SUPPORTED 0x00000002
++#define NDIS_RECEIVE_FILTER_IPV6_HEADER_SUPPORTED 0x00000004
++#define NDIS_RECEIVE_FILTER_ARP_HEADER_SUPPORTED 0x00000008
++#define NDIS_RECEIVE_FILTER_UDP_HEADER_SUPPORTED 0x00000010
++
++#define NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED 0x00000001
++#define NDIS_RECEIVE_FILTER_MAC_HEADER_SOURCE_ADDR_SUPPORTED 0x00000002
++#define NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED 0x00000004
++#define NDIS_RECEIVE_FILTER_MAC_HEADER_VLAN_ID_SUPPORTED 0x00000008
++#define NDIS_RECEIVE_FILTER_MAC_HEADER_PRIORITY_SUPPORTED 0x00000010
++#define NDIS_RECEIVE_FILTER_MAC_HEADER_PACKET_TYPE_SUPPORTED 0x00000020
++
++#define NDIS_RECEIVE_FILTER_ARP_HEADER_OPERATION_SUPPORTED 0x1
++#define NDIS_RECEIVE_FILTER_ARP_HEADER_SPA_SUPPORTED 0x2
++#define NDIS_RECEIVE_FILTER_ARP_HEADER_TPA_SUPPORTED 0x4
++
++#define NDIS_RECEIVE_FILTER_IPV4_HEADER_PROTOCOL_SUPPORTED 0x1
++#define NDIS_RECEIVE_FILTER_IPV6_HEADER_PROTOCOL_SUPPORTED 0x1
++#define NDIS_RECEIVE_FILTER_UDP_HEADER_DEST_PORT_SUPPORTED 0x1
++
++#define NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED 0x00000001
++#define NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED 0x00000002
++#define NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_NOT_EQUAL_SUPPORTED 0x00000004
++
++#define NDIS_RECEIVE_FILTER_MSI_X_SUPPORTED 0x00000001
++#define NDIS_RECEIVE_FILTER_VM_QUEUE_SUPPORTED 0x00000002
++#define NDIS_RECEIVE_FILTER_LOOKAHEAD_SPLIT_SUPPORTED 0x00000004
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_RECEIVE_FILTER_DYNAMIC_PROCESSOR_AFFINITY_CHANGE_SUPPORTED 0x00000008
++#define NDIS_RECEIVE_FILTER_INTERRUPT_VECTOR_COALESCING_SUPPORTED 0x00000010
++#define NDIS_RECEIVE_FILTER_ANY_VLAN_SUPPORTED 0x00000020
++#define NDIS_RECEIVE_FILTER_IMPLAT_MIN_OF_QUEUES_MODE 0x00000040
++#define NDIS_RECEIVE_FILTER_IMPLAT_SUM_OF_QUEUES_MODE 0x00000080
++#define NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE 0x00000100
++#endif
++
++#define NDIS_RECEIVE_FILTER_VMQ_FILTERS_ENABLED 0x00000001
++#define NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED 0x00000002
++
++#define NDIS_RECEIVE_FILTER_VM_QUEUES_ENABLED 0x00000001
++
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_NIC_SWITCH_CAPS_VLAN_SUPPORTED 0x00000001
++#define NDIS_NIC_SWITCH_CAPS_PER_VPORT_INTERRUPT_MODERATION_SUPPORTED 0x00000002
++#define NDIS_NIC_SWITCH_CAPS_ASYMMETRIC_QUEUE_PAIRS_FOR_NONDEFAULT_VPORT_SUPPORTED 0x00000004
++#define NDIS_NIC_SWITCH_CAPS_VF_RSS_SUPPORTED 0x00000008
++#define NDIS_NIC_SWITCH_CAPS_SINGLE_VPORT_POOL 0x00000010
++#endif
++
++
++#define NDIS_DEFAULT_RECEIVE_QUEUE_ID 0
++#define NDIS_DEFAULT_RECEIVE_QUEUE_GROUP_ID 0
++#define NDIS_DEFAULT_RECEIVE_FILTER_ID 0
++
++#define NDIS_RECEIVE_FILTER_FIELD_MAC_HEADER_VLAN_UNTAGGED_OR_ZERO 0x00000001
++#define NDIS_RECEIVE_FILTER_PACKET_ENCAPSULATION_GRE 0x00000002
++
++#define NDIS_RECEIVE_QUEUE_PARAMETERS_PER_QUEUE_RECEIVE_INDICATION 0x00000001
++#define NDIS_RECEIVE_QUEUE_PARAMETERS_LOOKAHEAD_SPLIT_REQUIRED 0x00000002
++#define NDIS_RECEIVE_QUEUE_PARAMETERS_FLAGS_CHANGED 0x00010000
++#define NDIS_RECEIVE_QUEUE_PARAMETERS_PROCESSOR_AFFINITY_CHANGED 0x00020000
++#define NDIS_RECEIVE_QUEUE_PARAMETERS_SUGGESTED_RECV_BUFFER_NUMBERS_CHANGED 0x00040000
++#define NDIS_RECEIVE_QUEUE_PARAMETERS_NAME_CHANGED 0x00080000
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_RECEIVE_QUEUE_PARAMETERS_INTERRUPT_COALESCING_DOMAIN_ID_CHANGED 0x00100000
++#endif
++
++#define NDIS_RECEIVE_QUEUE_PARAMETERS_CHANGE_MASK 0xffff0000
++
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_RECEIVE_FILTER_INFO_ARRAY_VPORT_ID_SPECIFIED 0x00000001
++#endif
++
++#define NDIS_PM_CAPABILITIES_REVISION_1 1
++#define NDIS_PM_PARAMETERS_REVISION_1 1
++#define NDIS_PM_WOL_PATTERN_REVISION_1 1
++#define NDIS_PM_PROTOCOL_OFFLOAD_REVISION_1 1
++#define NDIS_WMI_PM_ADMIN_CONFIG_REVISION_1 1
++#define NDIS_WMI_PM_ACTIVE_CAPABILITIES_REVISION_1 1
++#define NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_1 1
++#define NDIS_NIC_SWITCH_CAPABILITIES_REVISION_1 1
++#define NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS_REVISION_1 1
++#define NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1 1
++#define NDIS_RECEIVE_FILTER_PARAMETERS_REVISION_1 1
++#define NDIS_RECEIVE_FILTER_CLEAR_PARAMETERS_REVISION_1 1
++#define NDIS_RECEIVE_QUEUE_PARAMETERS_REVISION_1 1
++#define NDIS_RECEIVE_QUEUE_FREE_PARAMETERS_REVISION_1 1
++#define NDIS_RECEIVE_QUEUE_INFO_REVISION_1 1
++#define NDIS_RECEIVE_QUEUE_INFO_ARRAY_REVISION_1 1
++#define NDIS_RECEIVE_FILTER_INFO_REVISION_1 1
++#define NDIS_RECEIVE_FILTER_INFO_ARRAY_REVISION_1 1
++#define NDIS_RECEIVE_QUEUE_ALLOCATION_COMPLETE_PARAMETERS_REVISION_1 1
++#define NDIS_RECEIVE_QUEUE_ALLOCATION_COMPLETE_ARRAY_REVISION_1 1
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_PM_CAPABILITIES_REVISION_2 2
++#define NDIS_PM_PARAMETERS_REVISION_2 2
++#define NDIS_PM_WOL_PATTERN_REVISION_2 2
++#define NDIS_PM_WAKE_REASON_REVISION_1 1
++#define NDIS_PM_WAKE_PACKET_REVISION_1 1
++#define NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2 2
++#define NDIS_NIC_SWITCH_CAPABILITIES_REVISION_2 2
++#define NDIS_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2 2
++#define NDIS_RECEIVE_FILTER_PARAMETERS_REVISION_2 2
++#define NDIS_RECEIVE_QUEUE_PARAMETERS_REVISION_2 2
++#define NDIS_RECEIVE_FILTER_INFO_ARRAY_REVISION_2 2
++#define NDIS_RECEIVE_QUEUE_INFO_REVISION_2 2
++#endif
++
++#define NDIS_SIZEOF_WMI_OUTPUT_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_OUTPUT_INFO, DataOffset)
++#define NDIS_SIZEOF_NDIS_PM_CAPABILITIES_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_PM_CAPABILITIES, MinLinkChangeWakeUp)
++#define NDIS_SIZEOF_NDIS_PM_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_PM_PARAMETERS, WakeUpFlags)
++#define NDIS_SIZEOF_NDIS_PM_WOL_PATTERN_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_PM_WOL_PATTERN, WoLPattern)
++#define NDIS_SIZEOF_NDIS_PM_PROTOCOL_OFFLOAD_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_PM_PROTOCOL_OFFLOAD, ProtocolOffloadParameters)
++#define NDIS_SIZEOF_WMI_PM_ADMIN_CONFIG_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_PM_ADMIN_CONFIG, PMWiFiRekeyOffload)
++#define NDIS_SIZEOF_WMI_PM_ACTIVE_CAPABILITIES_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_PM_ACTIVE_CAPABILITIES, PMWiFiRekeyOffload)
++#define NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_CAPABILITIES, MaxLookaheadSplitSize)
++#define NDIS_SIZEOF_NIC_SWITCH_CAPABILITIES_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_CAPABILITIES, NdisReserved3)
++#define NDIS_SIZEOF_RECEIVE_FILTER_GLOBAL_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS, EnabledQueueTypes)
++#define NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_FIELD_PARAMETERS, ResultValue)
++#define NDIS_SIZEOF_RECEIVE_FILTER_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_PARAMETERS, RequestedFilterIdBitCount)
++#define NDIS_SIZEOF_RECEIVE_FILTER_CLEAR_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_CLEAR_PARAMETERS, FilterId)
++#define NDIS_SIZEOF_RECEIVE_QUEUE_FREE_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_QUEUE_FREE_PARAMETERS, QueueId)
++#define NDIS_SIZEOF_RECEIVE_QUEUE_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_QUEUE_PARAMETERS, QueueName)
++#define NDIS_SIZEOF_RECEIVE_QUEUE_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_QUEUE_INFO, QueueName)
++#define NDIS_SIZEOF_RECEIVE_QUEUE_INFO_ARRAY_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_QUEUE_INFO_ARRAY, ElementSize)
++#define NDIS_SIZEOF_RECEIVE_FILTER_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_INFO, FilterId)
++#define NDIS_SIZEOF_RECEIVE_QUEUE_ALLOCATION_COMPLETE_ARRAY_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_QUEUE_ALLOCATION_COMPLETE_ARRAY, ElementSize)
++#define NDIS_SIZEOF_RECEIVE_QUEUE_ALLOCATION_COMPLETE_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_QUEUE_ALLOCATION_COMPLETE_PARAMETERS, CompletionStatus)
++#define NDIS_SIZEOF_RECEIVE_FILTER_INFO_ARRAY_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_INFO_ARRAY, ElementSize)
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_SIZEOF_NDIS_PM_CAPABILITIES_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_PM_CAPABILITIES, MediaSpecificWakeUpEvents)
++#define NDIS_SIZEOF_NDIS_PM_PARAMETERS_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_PM_PARAMETERS, MediaSpecificWakeUpEvents)
++#define NDIS_SIZEOF_NDIS_PM_WOL_PATTERN_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_PM_WOL_PATTERN, WoLPattern)
++#define NDIS_SIZEOF_PM_WAKE_REASON_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_PM_WAKE_REASON, InfoBufferSize)
++#define NDIS_SIZEOF_PM_WAKE_PACKET_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_PM_WAKE_PACKET, SavedPacketOffset)
++#define NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_CAPABILITIES, NdisReserved)
++#define NDIS_SIZEOF_NIC_SWITCH_CAPABILITIES_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_CAPABILITIES, NdisReserved17)
++#define NDIS_SIZEOF_RECEIVE_FILTER_FIELD_PARAMETERS_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_FIELD_PARAMETERS, ResultValue)
++#define NDIS_SIZEOF_RECEIVE_FILTER_PARAMETERS_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_PARAMETERS, VPortId)
++#define NDIS_SIZEOF_RECEIVE_FILTER_INFO_ARRAY_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_INFO_ARRAY, VPortId)
++#define NDIS_SIZEOF_RECEIVE_QUEUE_INFO_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_QUEUE_INFO, InterruptCoalescingDomainId)
++#define NDIS_SIZEOF_RECEIVE_QUEUE_PARAMETERS_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_QUEUE_PARAMETERS, InterruptCoalescingDomainId)
++#endif
++
++ typedef enum _NDIS_PM_WOL_PACKET {
++ NdisPMWoLPacketUnspecified,
++ NdisPMWoLPacketBitmapPattern,
++ NdisPMWoLPacketMagicPacket,
++ NdisPMWoLPacketIPv4TcpSyn,
++ NdisPMWoLPacketIPv6TcpSyn,
++ NdisPMWoLPacketEapolRequestIdMessage,
++ NdisPMWoLPacketMaximum
++ } NDIS_PM_WOL_PACKET, *PNDIS_PM_WOL_PACKET;
++
++ typedef enum _NDIS_PM_PROTOCOL_OFFLOAD_TYPE {
++ NdisPMProtocolOffloadIdUnspecified,
++ NdisPMProtocolOffloadIdIPv4ARP,
++ NdisPMProtocolOffloadIdIPv6NS,
++ NdisPMProtocolOffload80211RSNRekey,
++ NdisPMProtocolOffloadIdMaximum
++ } NDIS_PM_PROTOCOL_OFFLOAD_TYPE, *PNDIS_PM_PROTOCOL_OFFLOAD_TYPE;
++
++ typedef struct _NDIS_PM_COUNTED_STRING {
++ USHORT Length;
++ WCHAR String[NDIS_PM_MAX_STRING_SIZE + 1];
++ } NDIS_PM_COUNTED_STRING, *PNDIS_PM_COUNTED_STRING;
++
++ typedef struct _NDIS_PM_CAPABILITIES {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG SupportedWoLPacketPatterns;
++ ULONG NumTotalWoLPatterns;
++ ULONG MaxWoLPatternSize;
++ ULONG MaxWoLPatternOffset;
++ ULONG MaxWoLPacketSaveBuffer;
++ ULONG SupportedProtocolOffloads;
++ ULONG NumArpOffloadIPv4Addresses;
++ ULONG NumNSOffloadIPv6Addresses;
++ NDIS_DEVICE_POWER_STATE MinMagicPacketWakeUp;
++ NDIS_DEVICE_POWER_STATE MinPatternWakeUp;
++ NDIS_DEVICE_POWER_STATE MinLinkChangeWakeUp;
++#if NDIS_SUPPORT_NDIS630
++ ULONG SupportedWakeUpEvents;
++ ULONG MediaSpecificWakeUpEvents;
++#endif
++ } NDIS_PM_CAPABILITIES, *PNDIS_PM_CAPABILITIES;
++
++ typedef struct _NDIS_PM_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG EnabledWoLPacketPatterns;
++ ULONG EnabledProtocolOffloads;
++ ULONG WakeUpFlags;
++#if NDIS_SUPPORT_NDIS630
++ ULONG MediaSpecificWakeUpEvents;
++#endif
++ } NDIS_PM_PARAMETERS, *PNDIS_PM_PARAMETERS;
++
++ typedef struct _NDIS_PM_WOL_PATTERN {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG Priority;
++ NDIS_PM_WOL_PACKET WoLPacketType;
++ NDIS_PM_COUNTED_STRING FriendlyName;
++ ULONG PatternId;
++ ULONG NextWoLPatternOffset;
++ union _WOL_PATTERN {
++ struct _IPV4_TCP_SYN_WOL_PACKET_PARAMETERS {
++ ULONG Flags;
++ UCHAR IPv4SourceAddress[4];
++ UCHAR IPv4DestAddress[4];
++ USHORT TCPSourcePortNumber;
++ USHORT TCPDestPortNumber;
++ } IPv4TcpSynParameters;
++ struct _IPV6_TCP_SYN_WOL_PACKET_PARAMETERS {
++ ULONG Flags;
++ UCHAR IPv6SourceAddress[16];
++ UCHAR IPv6DestAddress[16];
++ USHORT TCPSourcePortNumber;
++ USHORT TCPDestPortNumber;
++ } IPv6TcpSynParameters;
++ struct _EAPOL_REQUEST_ID_MESSAGE_WOL_PACKET_PARAMETERS {
++ ULONG Flags;
++ } EapolRequestIdMessageParameters;
++ struct _WOL_BITMAP_PATTERN {
++ ULONG Flags;
++ ULONG MaskOffset;
++ ULONG MaskSize;
++ ULONG PatternOffset;
++ ULONG PatternSize;
++ } WoLBitMapPattern;
++ } WoLPattern;
++ } NDIS_PM_WOL_PATTERN, *PNDIS_PM_WOL_PATTERN;
++
++ typedef struct _NDIS_PM_PROTOCOL_OFFLOAD {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG Priority;
++ NDIS_PM_PROTOCOL_OFFLOAD_TYPE ProtocolOffloadType;
++ NDIS_PM_COUNTED_STRING FriendlyName;
++ ULONG ProtocolOffloadId;
++ ULONG NextProtocolOffloadOffset;
++ union _PROTOCOL_OFFLOAD_PARAMETERS {
++ struct _IPV4_ARP_PARAMETERS {
++ ULONG Flags;
++ UCHAR RemoteIPv4Address[4];
++ UCHAR HostIPv4Address[4];
++ UCHAR MacAddress[6];
++ } IPv4ARPParameters;
++ struct _IPV6_NS_PARAMETERS {
++ ULONG Flags;
++ UCHAR RemoteIPv6Address[16];
++ UCHAR SolicitedNodeIPv6Address[16];
++ UCHAR MacAddress[6];
++ UCHAR TargetIPv6Addresses[2][16];
++ } IPv6NSParameters;
++ struct _DOT11_RSN_REKEY_PARAMETERS {
++ ULONG Flags;
++ UCHAR KCK[DOT11_RSN_KCK_LENGTH];
++ UCHAR KEK[DOT11_RSN_KEK_LENGTH];
++ ULONGLONG KeyReplayCounter;
++ } Dot11RSNRekeyParameters;
++ } ProtocolOffloadParameters;
++ } NDIS_PM_PROTOCOL_OFFLOAD, *PNDIS_PM_PROTOCOL_OFFLOAD;
++
++#if NDIS_SUPPORT_NDIS630
++ typedef enum _NDIS_PM_WAKE_REASON_TYPE {
++ NdisWakeReasonUnspecified = 0x0000,
++ NdisWakeReasonPacket = 0x0001,
++ NdisWakeReasonMediaDisconnect = 0x0002,
++ NdisWakeReasonMediaConnect = 0x0003,
++ NdisWakeReasonWlanNLODiscovery = 0x1000,
++ NdisWakeReasonWlanAPAssociationLost = 0x1001,
++ NdisWakeReasonWlanGTKHandshakeError = 0x1002,
++ NdisWakeReasonWlan4WayHandshakeRequest = 0x1003,
++ NdisWakeReasonWwanRegisterState = 0x2000,
++ NdisWakeReasonWwanSMSReceive = 0x2001,
++ NdisWakeReasonWwanUSSDReceive = 0x2002,
++ } NDIS_PM_WAKE_REASON_TYPE, *PNDIS_PM_WAKE_REASON_TYPE;
++
++ typedef struct _NDIS_PM_WAKE_REASON {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_PM_WAKE_REASON_TYPE WakeReason;
++ ULONG InfoBufferOffset;
++ ULONG InfoBufferSize;
++ } NDIS_PM_WAKE_REASON, *PNDIS_PM_WAKE_REASON;
++
++ typedef struct _NDIS_PM_WAKE_PACKET {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG PatternId;
++ NDIS_PM_COUNTED_STRING PatternFriendlyName;
++ ULONG OriginalPacketSize;
++ ULONG SavedPacketSize;
++ ULONG SavedPacketOffset;
++ } NDIS_PM_WAKE_PACKET, *PNDIS_PM_WAKE_PACKET;
++#endif
++
++ typedef enum _NDIS_PM_ADMIN_CONFIG_STATE {
++ NdisPMAdminConfigUnspecified = 0,
++ NdisPMAdminConfigDisabled = 1,
++ NdisPMAdminConfigEnabled = 2
++ } NDIS_PM_ADMIN_CONFIG_STATE, *PNDIS_PM_ADMIN_CONFIG_STATE;
++
++ typedef struct _NDIS_WMI_PM_ADMIN_CONFIG {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_PM_ADMIN_CONFIG_STATE WakeOnPattern;
++ NDIS_PM_ADMIN_CONFIG_STATE WakeOnMagicPacket;
++ NDIS_PM_ADMIN_CONFIG_STATE DeviceSleepOnDisconnect;
++ NDIS_PM_ADMIN_CONFIG_STATE PMARPOffload;
++ NDIS_PM_ADMIN_CONFIG_STATE PMNSOffload;
++ NDIS_PM_ADMIN_CONFIG_STATE PMWiFiRekeyOffload;
++ } NDIS_WMI_PM_ADMIN_CONFIG, *PNDIS_WMI_PM_ADMIN_CONFIG;
++
++ typedef enum _NDIS_PM_CAPABILITY_STATE {
++ NdisPMAdminConfigUnsupported = 0,
++ NdisPMAdminConfigInactive = 1,
++ NdisPMAdminConfigActive = 2
++ } NDIS_PM_CAPABILITY_STATE, *PNDIS_PM_CAPABILITY_STATE;
++
++ typedef struct _NDIS_WMI_PM_ACTIVE_CAPABILITIES {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_PM_CAPABILITY_STATE WakeOnPattern;
++ NDIS_PM_CAPABILITY_STATE WakeOnMagicPacket;
++ NDIS_PM_CAPABILITY_STATE DeviceSleepOnDisconnect;
++ NDIS_PM_CAPABILITY_STATE PMARPOffload;
++ NDIS_PM_CAPABILITY_STATE PMNSOffload;
++ NDIS_PM_CAPABILITY_STATE PMWiFiRekeyOffload;
++ } NDIS_WMI_PM_ACTIVE_CAPABILITIES, *PNDIS_WMI_PM_ACTIVE_CAPABILITIES;
++
++ typedef struct _NDIS_RECEIVE_FILTER_CAPABILITIES {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG EnabledFilterTypes;
++ ULONG EnabledQueueTypes;
++ ULONG NumQueues;
++ ULONG SupportedQueueProperties;
++ ULONG SupportedFilterTests;
++ ULONG SupportedHeaders;
++ ULONG SupportedMacHeaderFields;
++ ULONG MaxMacHeaderFilters;
++ ULONG MaxQueueGroups;
++ ULONG MaxQueuesPerQueueGroup;
++ ULONG MinLookaheadSplitSize;
++ ULONG MaxLookaheadSplitSize;
++#if NDIS_SUPPORT_NDIS630
++ ULONG SupportedARPHeaderFields;
++ ULONG SupportedIPv4HeaderFields;
++ ULONG SupportedIPv6HeaderFields;
++ ULONG SupportedUdpHeaderFields;
++ ULONG MaxFieldTestsPerPacketCoalescingFilter;
++ ULONG MaxPacketCoalescingFilters;
++ ULONG NdisReserved;
++#endif
++ } NDIS_RECEIVE_FILTER_CAPABILITIES, *PNDIS_RECEIVE_FILTER_CAPABILITIES;
++
++ typedef struct _NDIS_NIC_SWITCH_CAPABILITIES {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG NdisReserved1;
++ ULONG NumTotalMacAddresses;
++ ULONG NumMacAddressesPerPort;
++ ULONG NumVlansPerPort;
++ ULONG NdisReserved2;
++ ULONG NdisReserved3;
++#if NDIS_SUPPORT_NDIS630
++ ULONG NicSwitchCapabilities;
++ ULONG MaxNumSwitches;
++ ULONG MaxNumVPorts;
++ ULONG NdisReserved4;
++ ULONG MaxNumVFs;
++ ULONG MaxNumQueuePairs;
++ ULONG NdisReserved5;
++ ULONG NdisReserved6;
++ ULONG NdisReserved7;
++ ULONG MaxNumQueuePairsPerNonDefaultVPort;
++ ULONG NdisReserved8;
++ ULONG NdisReserved9;
++ ULONG NdisReserved10;
++ ULONG NdisReserved11;
++ ULONG NdisReserved12;
++ ULONG MaxNumMacAddresses;
++ ULONG NdisReserved13;
++ ULONG NdisReserved14;
++ ULONG NdisReserved15;
++ ULONG NdisReserved16;
++ ULONG NdisReserved17;
++#endif
++ } NDIS_NIC_SWITCH_CAPABILITIES, *PNDIS_NIC_SWITCH_CAPABILITIES;
++
++ typedef struct _NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG EnabledFilterTypes;
++ ULONG EnabledQueueTypes;
++ } NDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS, *PNDIS_RECEIVE_FILTER_GLOBAL_PARAMETERS;
++
++ typedef ULONG NDIS_RECEIVE_QUEUE_ID, *PNDIS_RECEIVE_QUEUE_ID;
++ typedef ULONG NDIS_RECEIVE_QUEUE_GROUP_ID, *PNDIS_RECEIVE_QUEUE_GROUP_ID;
++ typedef ULONG NDIS_RECEIVE_FILTER_ID, *PNDIS_RECEIVE_FILTER_ID;
++
++ typedef enum _NDIS_RECEIVE_FILTER_TYPE {
++ NdisReceiveFilterTypeUndefined,
++ NdisReceiveFilterTypeVMQueue,
++ NdisReceiveFilterTypePacketCoalescing,
++ NdisReceiveFilterTypeMaximum
++ } NDIS_RECEIVE_FILTER_TYPE, *PNDIS_RECEIVE_FILTER_TYPE;
++
++ typedef enum _NDIS_FRAME_HEADER {
++ NdisFrameHeaderUndefined,
++ NdisFrameHeaderMac,
++ NdisFrameHeaderArp,
++ NdisFrameHeaderIPv4,
++ NdisFrameHeaderIPv6,
++ NdisFrameHeaderUdp,
++ NdisFrameHeaderMaximum
++ } NDIS_FRAME_HEADER, *PNDIS_FRAME_HEADER;
++
++ typedef enum _NDIS_MAC_HEADER_FIELD {
++ NdisMacHeaderFieldUndefined,
++ NdisMacHeaderFieldDestinationAddress,
++ NdisMacHeaderFieldSourceAddress,
++ NdisMacHeaderFieldProtocol,
++ NdisMacHeaderFieldVlanId,
++ NdisMacHeaderFieldPriority,
++ NdisMacHeaderFieldPacketType,
++ NdisMacHeaderFieldMaximum
++ } NDIS_MAC_HEADER_FIELD, *PNDIS_MAC_HEADER_FIELD;
++
++ typedef enum _NDIS_MAC_PACKET_TYPE {
++ NdisMacPacketTypeUndefined = 0,
++ NdisMacPacketTypeUnicast = 1,
++ NdisMacPacketTypeMulticast = 2,
++ NdisMacPacketTypeBroadcast = 3,
++ NdisMacPacketTypeMaximum
++ } NDIS_MAC_PACKET_TYPE, *PNDIS_MAC_PACKET_TYPE;
++
++ typedef enum _NDIS_ARP_HEADER_FIELD {
++ NdisARPHeaderFieldUndefined,
++ NdisARPHeaderFieldOperation,
++ NdisARPHeaderFieldSPA,
++ NdisARPHeaderFieldTPA,
++ NdisARPHeaderFieldMaximum
++ } NDIS_ARP_HEADER_FIELD, *PNDIS_ARP_HEADER_FIELD;
++
++ typedef enum _NDIS_IPV4_HEADER_FIELD {
++ NdisIPv4HeaderFieldUndefined,
++ NdisIPv4HeaderFieldProtocol,
++ NdisIPv4HeaderFieldMaximum
++ } NDIS_IPV4_HEADER_FIELD, *PNDIS_IPV4_HEADER_FIELD;
++
++ typedef enum _NDIS_IPV6_HEADER_FIELD {
++ NdisIPv6HeaderFieldUndefined,
++ NdisIPv6HeaderFieldProtocol,
++ NdisIPv6HeaderFieldMaximum
++ } NDIS_IPV6_HEADER_FIELD, *PNDIS_IPV6_HEADER_FIELD;
++
++ typedef enum _NDIS_UDP_HEADER_FIELD {
++ NdisUdpHeaderFieldUndefined,
++ NdisUdpHeaderFieldDestinationPort,
++ NdisUdpHeaderFieldMaximum
++ } NDIS_UDP_HEADER_FIELD, *PNDIS_UDP_HEADER_FIELD;
++
++ typedef enum _NDIS_RECEIVE_FILTER_TEST {
++ NdisReceiveFilterTestUndefined,
++ NdisReceiveFilterTestEqual,
++ NdisReceiveFilterTestMaskEqual,
++ NdisReceiveFilterTestNotEqual,
++ NdisReceiveFilterTestMaximum
++ } NDIS_RECEIVE_FILTER_TEST, *PNDIS_RECEIVE_FILTER_TEST;
++
++ typedef struct _NDIS_RECEIVE_FILTER_FIELD_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_FRAME_HEADER FrameHeader;
++ NDIS_RECEIVE_FILTER_TEST ReceiveFilterTest;
++ union _HEADER_FIELD {
++ NDIS_MAC_HEADER_FIELD MacHeaderField;
++ NDIS_ARP_HEADER_FIELD ArpHeaderField;
++ NDIS_IPV4_HEADER_FIELD IPv4HeaderField;
++ NDIS_IPV6_HEADER_FIELD IPv6HeaderField;
++ NDIS_UDP_HEADER_FIELD UdpHeaderField;
++ } HeaderField;
++ union _FIELD_VALUE {
++ UCHAR FieldByteValue;
++ USHORT FieldShortValue;
++ ULONG FieldLongValue;
++ ULONG64 FieldLong64Value;
++ UCHAR FieldByteArrayValue[16];
++ } FieldValue;
++ union _RESULT_VALUE {
++ UCHAR ResultByteValue;
++ USHORT ResultShortValue;
++ ULONG ResultLongValue;
++ ULONG64 ResultLong64Value;
++ UCHAR ResultByteArrayValue[16];
++ } ResultValue;
++ } NDIS_RECEIVE_FILTER_FIELD_PARAMETERS, *PNDIS_RECEIVE_FILTER_FIELD_PARAMETERS;
++
++#if NDIS_SUPPORT_NDIS630
++ typedef ULONG NDIS_NIC_SWITCH_VPORT_ID, *PNDIS_NIC_SWITCH_VPORT_ID;
++#endif
++
++ typedef struct _NDIS_RECEIVE_FILTER_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_RECEIVE_FILTER_TYPE FilterType;
++ NDIS_RECEIVE_QUEUE_ID QueueId;
++ NDIS_RECEIVE_FILTER_ID FilterId;
++ ULONG FieldParametersArrayOffset;
++ ULONG FieldParametersArrayNumElements;
++ ULONG FieldParametersArrayElementSize;
++ ULONG RequestedFilterIdBitCount;
++#if NDIS_SUPPORT_NDIS630
++ ULONG MaxCoalescingDelay;
++ NDIS_NIC_SWITCH_VPORT_ID VPortId;
++#endif
++ } NDIS_RECEIVE_FILTER_PARAMETERS, *PNDIS_RECEIVE_FILTER_PARAMETERS;
++
++ typedef struct _NDIS_RECEIVE_FILTER_CLEAR_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_RECEIVE_QUEUE_ID QueueId;
++ NDIS_RECEIVE_FILTER_ID FilterId;
++ } NDIS_RECEIVE_FILTER_CLEAR_PARAMETERS, *PNDIS_RECEIVE_FILTER_CLEAR_PARAMETERS;
++
++ typedef enum _NDIS_RECEIVE_QUEUE_TYPE {
++ NdisReceiveQueueTypeUnspecified,
++ NdisReceiveQueueTypeVMQueue,
++ NdisReceiveQueueTypeMaximum
++ } NDIS_RECEIVE_QUEUE_TYPE, *PNDIS_RECEIVE_QUEUE_TYPE;
++
++ typedef NDIS_IF_COUNTED_STRING NDIS_QUEUE_NAME, *PNDIS_QUEUE_NAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_VM_NAME, *PNDIS_VM_NAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_VM_FRIENDLYNAME, *PNDIS_VM_FRIENDLYNAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_SWITCH_PORT_PROPERTY_PROFILE_NAME, *PNDIS_SWITCH_PORT_PROPERTY_PROFILE_NAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_SWITCH_PORT_PROPERTY_PROFILE_CDN_LABEL, *PNDIS_SWITCH_PORT_PROPERTY_PROFILE_CDN_LABEL;
++ typedef NDIS_IF_COUNTED_STRING NDIS_SWITCH_NAME, *PNDIS_SWITCH_NAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_SWITCH_FRIENDLYNAME, *PNDIS_SWITCH_FRIENDLYNAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_SWITCH_PORT_NAME, *PNDIS_SWITCH_PORT_NAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_SWITCH_PORT_FRIENDLYNAME, *PNDIS_SWITCH_PORT_FRIENDLYNAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_SWITCH_NIC_NAME, *PNDIS_SWITCH_NIC_NAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_SWITCH_NIC_FRIENDLYNAME, *PNDIS_SWITCH_NIC_FRIENDLYNAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_SWITCH_EXTENSION_FRIENDLYNAME, *PNDIS_SWITCH_EXTENSION_FRIENDLYNAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_VENDOR_NAME, *PNDIS_VENDOR_NAME;
++
++ typedef struct _NDIS_RECEIVE_QUEUE_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_RECEIVE_QUEUE_TYPE QueueType;
++ NDIS_RECEIVE_QUEUE_ID QueueId;
++ NDIS_RECEIVE_QUEUE_GROUP_ID QueueGroupId;
++ GROUP_AFFINITY ProcessorAffinity;
++ ULONG NumSuggestedReceiveBuffers;
++ ULONG MSIXTableEntry;
++ ULONG LookaheadSize;
++ NDIS_VM_NAME VmName;
++ NDIS_QUEUE_NAME QueueName;
++#if NDIS_SUPPORT_NDIS630
++ ULONG PortId;
++ ULONG InterruptCoalescingDomainId;
++#endif
++ } NDIS_RECEIVE_QUEUE_PARAMETERS, *PNDIS_RECEIVE_QUEUE_PARAMETERS;
++
++ typedef struct _NDIS_RECEIVE_QUEUE_FREE_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_RECEIVE_QUEUE_ID QueueId;
++ } NDIS_RECEIVE_QUEUE_FREE_PARAMETERS, *PNDIS_RECEIVE_QUEUE_FREE_PARAMETERS;
++
++ typedef enum _NDIS_RECEIVE_QUEUE_OPERATIONAL_STATE {
++ NdisReceiveQueueOperationalStateUndefined,
++ NdisReceiveQueueOperationalStateRunning,
++ NdisReceiveQueueOperationalStatePaused,
++ NdisReceiveQueueOperationalStateDmaStopped,
++ NdisReceiveQueueOperationalStateMaximum
++ } NDIS_RECEIVE_QUEUE_OPERATIONAL_STATE, *PNDIS_RECEIVE_QUEUE_OPERATIONAL_STATE;
++
++ typedef struct _NDIS_RECEIVE_QUEUE_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_RECEIVE_QUEUE_TYPE QueueType;
++ NDIS_RECEIVE_QUEUE_ID QueueId;
++ NDIS_RECEIVE_QUEUE_GROUP_ID QueueGroupId;
++ NDIS_RECEIVE_QUEUE_OPERATIONAL_STATE QueueState;
++ GROUP_AFFINITY ProcessorAffinity;
++ ULONG NumSuggestedReceiveBuffers;
++ ULONG MSIXTableEntry;
++ ULONG LookaheadSize;
++ NDIS_VM_NAME VmName;
++ NDIS_QUEUE_NAME QueueName;
++#if NDIS_SUPPORT_NDIS630
++ ULONG NumFilters;
++ ULONG InterruptCoalescingDomainId;
++#endif
++ } NDIS_RECEIVE_QUEUE_INFO, *PNDIS_RECEIVE_QUEUE_INFO;
++
++ typedef struct _NDIS_RECEIVE_QUEUE_INFO_ARRAY {
++ NDIS_OBJECT_HEADER Header;
++ ULONG FirstElementOffset;
++ ULONG NumElements;
++ ULONG ElementSize;
++ } NDIS_RECEIVE_QUEUE_INFO_ARRAY, *PNDIS_RECEIVE_QUEUE_INFO_ARRAY;
++
++ typedef struct _NDIS_RECEIVE_FILTER_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_RECEIVE_FILTER_TYPE FilterType;
++ NDIS_RECEIVE_FILTER_ID FilterId;
++ } NDIS_RECEIVE_FILTER_INFO, *PNDIS_RECEIVE_FILTER_INFO;
++
++ typedef struct _NDIS_RECEIVE_FILTER_INFO_ARRAY {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_RECEIVE_QUEUE_ID QueueId;
++ ULONG FirstElementOffset;
++ ULONG NumElements;
++ ULONG ElementSize;
++#if NDIS_SUPPORT_NDIS630
++ ULONG Flags;
++ NDIS_NIC_SWITCH_VPORT_ID VPortId;
++#endif
++ } NDIS_RECEIVE_FILTER_INFO_ARRAY, *PNDIS_RECEIVE_FILTER_INFO_ARRAY;
++
++ typedef struct _NDIS_RECEIVE_QUEUE_ALLOCATION_COMPLETE_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_RECEIVE_QUEUE_ID QueueId;
++ NDIS_STATUS CompletionStatus;
++ } NDIS_RECEIVE_QUEUE_ALLOCATION_COMPLETE_PARAMETERS, *PNDIS_RECEIVE_QUEUE_ALLOCATION_COMPLETE_PARAMETERS;
++
++ typedef struct _NDIS_RECEIVE_QUEUE_ALLOCATION_COMPLETE_ARRAY {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG FirstElementOffset;
++ ULONG NumElements;
++ ULONG ElementSize;
++ } NDIS_RECEIVE_QUEUE_ALLOCATION_COMPLETE_ARRAY, *PNDIS_RECEIVE_QUEUE_ALLOCATION_COMPLETE_ARRAY;
++#endif
++
++#if NTDDI_VERSION >= 0x06000000 || NDIS_SUPPORT_NDIS6
++#define NDIS_RSS_CAPS_MESSAGE_SIGNALED_INTERRUPTS 0x01000000
++#define NDIS_RSS_CAPS_CLASSIFICATION_AT_ISR 0x02000000
++#define NDIS_RSS_CAPS_CLASSIFICATION_AT_DPC 0x04000000
++#if NDIS_SUPPORT_NDIS620
++#define NDIS_RSS_CAPS_USING_MSI_X 0x08000000
++#endif
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_RSS_CAPS_RSS_AVAILABLE_ON_PORTS 0x10000000
++#define NDIS_RSS_CAPS_SUPPORTS_MSI_X 0x20000000
++#endif
++#define NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV4 0x00000100
++#define NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6 0x00000200
++#define NDIS_RSS_CAPS_HASH_TYPE_TCP_IPV6_EX 0x00000400
++
++#define NdisHashFunctionToeplitz 0x00000001
++#define NdisHashFunctionReserved1 0x00000002
++#define NdisHashFunctionReserved2 0x00000004
++#define NdisHashFunctionReserved3 0x00000008
++
++#define NDIS_HASH_FUNCTION_MASK 0x000000ff
++#define NDIS_HASH_TYPE_MASK 0x00ffff00
++
++#define NDIS_RSS_HASH_FUNC_FROM_HASH_INFO(HINFO) ((HINFO) & (NDIS_HASH_FUNCTION_MASK))
++#define NDIS_RSS_HASH_TYPE_FROM_HASH_INFO(HINFO) ((HINFO) & (NDIS_HASH_TYPE_MASK))
++#define NDIS_RSS_HASH_INFO_FROM_TYPE_AND_FUNC(HTYPE, HFCT) ((HTYPE) | (HFCT))
++
++#define NDIS_HASH_IPV4 0x00000100
++#define NDIS_HASH_TCP_IPV4 0x00000200
++#define NDIS_HASH_IPV6 0x00000400
++#define NDIS_HASH_IPV6_EX 0x00000800
++#define NDIS_HASH_TCP_IPV6 0x00001000
++#define NDIS_HASH_TCP_IPV6_EX 0x00002000
++
++#define NDIS_RSS_PARAM_FLAG_BASE_CPU_UNCHANGED 0x0001
++#define NDIS_RSS_PARAM_FLAG_HASH_INFO_UNCHANGED 0x0002
++#define NDIS_RSS_PARAM_FLAG_ITABLE_UNCHANGED 0x0004
++#define NDIS_RSS_PARAM_FLAG_HASH_KEY_UNCHANGED 0x0008
++#define NDIS_RSS_PARAM_FLAG_DISABLE_RSS 0x0010
++
++#define NDIS_RSS_INDIRECTION_TABLE_SIZE_REVISION_1 128
++#define NDIS_RSS_HASH_SECRET_KEY_SIZE_REVISION_1 40
++
++#define NDIS_RSS_INDIRECTION_TABLE_MAX_SIZE_REVISION_1 128
++#define NDIS_RSS_HASH_SECRET_KEY_MAX_SIZE_REVISION_1 40
++
++#if NDIS_SUPPORT_NDIS620
++#define NDIS_RSS_INDIRECTION_TABLE_MAX_SIZE_REVISION_2 (128 * sizeof (PROCESSOR_NUMBER))
++#define NDIS_RSS_HASH_SECRET_KEY_MAX_SIZE_REVISION_2 40
++#endif
++
++#define NDIS_RECEIVE_HASH_FLAG_ENABLE_HASH 0x00000001
++#define NDIS_RECEIVE_HASH_FLAG_HASH_INFO_UNCHANGED 0x00000002
++#define NDIS_RECEIVE_HASH_FLAG_HASH_KEY_UNCHANGED 0x00000004
++
++#define NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS 0x00000001
++
++#define NDIS_RECEIVE_SCALE_CAPABILITIES_REVISION_1 1
++#define NDIS_RECEIVE_HASH_PARAMETERS_REVISION_1 1
++#define NDIS_PORT_STATE_REVISION_1 1
++#define NDIS_PORT_CHARACTERISTICS_REVISION_1 1
++#define NDIS_PORT_ARRAY_REVISION_1 1
++#define NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_1 1
++#if NDIS_SUPPORT_NDIS620
++#define NDIS_RECEIVE_SCALE_PARAMETERS_REVISION_2 2
++#endif
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_RECEIVE_SCALE_CAPABILITIES_REVISION_2 2
++#endif
++
++#define NDIS_SIZEOF_RECEIVE_SCALE_CAPABILITIES_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_SCALE_CAPABILITIES, NumberOfReceiveQueues)
++#define NDIS_SIZEOF_RECEIVE_SCALE_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_SCALE_PARAMETERS, HashSecretKeyOffset)
++#define NDIS_SIZEOF_RECEIVE_HASH_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_HASH_PARAMETERS, HashSecretKeyOffset)
++#define NDIS_SIZEOF_PORT_STATE_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_PORT_STATE, Flags)
++#define NDIS_SIZEOF_PORT_CHARACTERISTICS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_PORT_CHARACTERISTICS, RcvAuthorizationState)
++#define NDIS_SIZEOF_PORT_ARRAY_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_PORT_ARRAY, Ports)
++#if NDIS_SUPPORT_NDIS620
++#define NDIS_SIZEOF_RECEIVE_SCALE_PARAMETERS_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_SCALE_PARAMETERS, ProcessorMasksEntrySize)
++#endif
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_SIZEOF_RECEIVE_SCALE_CAPABILITIES_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_SCALE_CAPABILITIES, NumberOfIndirectionTableEntries)
++#endif
++
++ typedef struct _NDIS_RECEIVE_SCALE_CAPABILITIES {
++ NDIS_OBJECT_HEADER Header;
++ ULONG CapabilitiesFlags;
++ ULONG NumberOfInterruptMessages;
++ ULONG NumberOfReceiveQueues;
++#if NDIS_SUPPORT_NDIS630
++ USHORT NumberOfIndirectionTableEntries;
++#endif
++ } NDIS_RECEIVE_SCALE_CAPABILITIES, *PNDIS_RECEIVE_SCALE_CAPABILITIES;
++
++ typedef struct _NDIS_RECEIVE_SCALE_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ USHORT Flags;
++ USHORT BaseCpuNumber;
++ ULONG HashInformation;
++ USHORT IndirectionTableSize;
++ ULONG IndirectionTableOffset;
++ USHORT HashSecretKeySize;
++ ULONG HashSecretKeyOffset;
++#if NDIS_SUPPORT_NDIS620
++ ULONG ProcessorMasksOffset;
++ ULONG NumberOfProcessorMasks;
++ ULONG ProcessorMasksEntrySize;
++#endif
++ } NDIS_RECEIVE_SCALE_PARAMETERS, *PNDIS_RECEIVE_SCALE_PARAMETERS;
++
++ typedef struct _NDIS_RECEIVE_HASH_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG HashInformation;
++ USHORT HashSecretKeySize;
++ ULONG HashSecretKeyOffset;
++ } NDIS_RECEIVE_HASH_PARAMETERS, *PNDIS_RECEIVE_HASH_PARAMETERS;
++
++ typedef enum _NDIS_PROCESSOR_VENDOR {
++ NdisProcessorVendorUnknown,
++ NdisProcessorVendorGenuinIntel,
++ NdisProcessorVendorGenuineIntel = NdisProcessorVendorGenuinIntel,
++ NdisProcessorVendorAuthenticAMD
++ } NDIS_PROCESSOR_VENDOR, *PNDIS_PROCESSOR_VENDOR;
++
++#if NDIS_SUPPORT_NDIS620
++#define NDIS_HYPERVISOR_INFO_FLAG_HYPERVISOR_PRESENT 0x00000001
++
++#define NDIS_RSS_PROCESSOR_INFO_REVISION_1 1
++#define NDIS_SYSTEM_PROCESSOR_INFO_EX_REVISION_1 1
++#define NDIS_HYPERVISOR_INFO_REVISION_1 1
++#define NDIS_WMI_RECEIVE_QUEUE_INFO_REVISION_1 1
++#define NDIS_WMI_RECEIVE_QUEUE_PARAMETERS_REVISION_1 1
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_RSS_PROCESSOR_INFO_REVISION_2 2
++#endif
++
++#define NDIS_SIZEOF_RSS_PROCESSOR_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RSS_PROCESSOR, PreferenceIndex)
++#define NDIS_SIZEOF_RSS_PROCESSOR_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RSS_PROCESSOR_INFO, RssProcessorEntrySize)
++#define NDIS_SIZEOF_SYSTEM_PROCESSOR_INFO_EX_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SYSTEM_PROCESSOR_INFO_EX, ProcessorInfoEntrySize)
++#define NDIS_SIZEOF_HYPERVISOR_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_HYPERVISOR_INFO, PartitionType)
++#define NDIS_SIZEOF_WMI_RECEIVE_QUEUE_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_RECEIVE_QUEUE_PARAMETERS, QueueName)
++#define NDIS_SIZEOF_WMI_RECEIVE_QUEUE_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_WMI_RECEIVE_QUEUE_INFO, QueueName)
++#if NDIS_SUPPORT_NDIS630
++#define NDIS_SIZEOF_RSS_PROCESSOR_INFO_REVISION_2 RTL_SIZEOF_THROUGH_FIELD (NDIS_RSS_PROCESSOR_INFO, RssProfile)
++#endif
++
++ typedef struct _NDIS_RSS_PROCESSOR {
++ PROCESSOR_NUMBER ProcNum;
++ USHORT PreferenceIndex;
++ USHORT Reserved;
++ } NDIS_RSS_PROCESSOR, *PNDIS_RSS_PROCESSOR;
++
++#if NDIS_SUPPORT_NDIS630
++ typedef enum _NDIS_RSS_PROFILE {
++ NdisRssProfileClosest = 1,
++ NdisRssProfileClosestStatic,
++ NdisRssProfileNuma,
++ NdisRssProfileNumaStatic,
++ NdisRssProfileConservative,
++ NdisRssProfileMaximum,
++ } NDIS_RSS_PROFILE, *PNDIS_RSS_PROFILE;
++#endif
++
++ typedef struct _NDIS_RSS_PROCESSOR_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ PROCESSOR_NUMBER RssBaseProcessor;
++ ULONG MaxNumRssProcessors;
++ USHORT PreferredNumaNode;
++ ULONG RssProcessorArrayOffset;
++ ULONG RssProcessorCount;
++ ULONG RssProcessorEntrySize;
++#if NDIS_SUPPORT_NDIS630
++ PROCESSOR_NUMBER RssMaxProcessor;
++ NDIS_RSS_PROFILE RssProfile;
++#endif
++ } NDIS_RSS_PROCESSOR_INFO, *PNDIS_RSS_PROCESSOR_INFO;
++
++ typedef struct _NDIS_PROCESSOR_INFO_EX {
++ PROCESSOR_NUMBER ProcNum;
++ ULONG SocketId;
++ ULONG CoreId;
++ ULONG HyperThreadId;
++ USHORT NodeId;
++ USHORT NodeDistance;
++ } NDIS_PROCESSOR_INFO_EX, *PNDIS_PROCESSOR_INFO_EX;
++
++ typedef struct _NDIS_SYSTEM_PROCESSOR_INFO_EX {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_PROCESSOR_VENDOR ProcessorVendor;
++ ULONG NumSockets;
++ ULONG NumCores;
++ ULONG NumCoresPerSocket;
++ ULONG MaxHyperThreadingProcsPerCore;
++ ULONG ProcessorInfoOffset;
++ ULONG NumberOfProcessors;
++ ULONG ProcessorInfoEntrySize;
++ } NDIS_SYSTEM_PROCESSOR_INFO_EX, *PNDIS_SYSTEM_PROCESSOR_INFO_EX;
++
++ typedef enum _NDIS_HYPERVISOR_PARTITION_TYPE {
++ NdisHypervisorPartitionTypeUnknown,
++ NdisHypervisorPartitionTypeMsHvParent,
++ NdisHypervisorPartitionMsHvChild,
++ NdisHypervisorPartitionTypeMax
++ } NDIS_HYPERVISOR_PARTITION_TYPE, *PNDIS_HYPERVISOR_PARTITION_TYPE;
++
++ typedef struct _NDIS_HYPERVISOR_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_HYPERVISOR_PARTITION_TYPE PartitionType;
++ } NDIS_HYPERVISOR_INFO, *PNDIS_HYPERVISOR_INFO;
++
++ typedef struct _NDIS_WMI_GROUP_AFFINITY {
++ ULONG64 Mask;
++ USHORT Group;
++ USHORT Reserved[3];
++ } NDIS_WMI_GROUP_AFFINITY, *PNDIS_WMI_GROUP_AFFINITY;
++
++ typedef struct _NDIS_WMI_RECEIVE_QUEUE_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_RECEIVE_QUEUE_TYPE QueueType;
++ NDIS_RECEIVE_QUEUE_ID QueueId;
++ NDIS_RECEIVE_QUEUE_GROUP_ID QueueGroupId;
++ NDIS_WMI_GROUP_AFFINITY ProcessorAffinity;
++ ULONG NumSuggestedReceiveBuffers;
++ ULONG MSIXTableEntry;
++ ULONG LookaheadSize;
++ NDIS_VM_NAME VmName;
++ NDIS_QUEUE_NAME QueueName;
++ } NDIS_WMI_RECEIVE_QUEUE_PARAMETERS, *PNDIS_WMI_RECEIVE_QUEUE_PARAMETERS;
++
++ typedef struct _NDIS_WMI_RECEIVE_QUEUE_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_RECEIVE_QUEUE_TYPE QueueType;
++ NDIS_RECEIVE_QUEUE_ID QueueId;
++ NDIS_RECEIVE_QUEUE_GROUP_ID QueueGroupId;
++ NDIS_RECEIVE_QUEUE_OPERATIONAL_STATE QueueState;
++ NDIS_WMI_GROUP_AFFINITY ProcessorAffinity;
++ ULONG NumSuggestedReceiveBuffers;
++ ULONG MSIXTableEntry;
++ ULONG LookaheadSize;
++ NDIS_VM_NAME VmName;
++ NDIS_QUEUE_NAME QueueName;
++ } NDIS_WMI_RECEIVE_QUEUE_INFO, *PNDIS_WMI_RECEIVE_QUEUE_INFO;
++#endif
++
++#if NDIS_SUPPORT_NDIS630
++
++#define NDIS_NDK_PERFORMANCE_COUNTER_MASK(CNTFIELD) (((ULONG64) 1) << (FIELD_OFFSET (NDIS_NDK_PERFORMANCE_COUNTERS, CNTFIELD) / sizeof (ULONG64)))
++
++#define OID_NDK_SET_STATE 0xfc040201
++#define OID_NDK_STATISTICS 0xfc040202
++#define OID_NDK_CONNECTIONS 0xfc040203
++#define OID_NDK_LOCAL_ENDPOINTS 0xfc040204
++
++#define OID_QOS_HARDWARE_CAPABILITIES 0xfc050001
++#define OID_QOS_CURRENT_CAPABILITIES 0xfc050002
++#define OID_QOS_PARAMETERS 0xfc050003
++#define OID_QOS_OPERATIONAL_PARAMETERS 0xfc050004
++#define OID_QOS_REMOTE_PARAMETERS 0xfc050005
++
++#define NDIS_QOS_MAXIMUM_PRIORITIES 8
++#define NDIS_QOS_MAXIMUM_TRAFFIC_CLASSES 8
++
++#define NDIS_QOS_CAPABILITIES_STRICT_TSA_SUPPORTED 0x00000001
++#define NDIS_QOS_CAPABILITIES_MACSEC_BYPASS_SUPPORTED 0x00000002
++#define NDIS_QOS_CAPABILITIES_CEE_DCBX_SUPPORTED 0x00000004
++#define NDIS_QOS_CAPABILITIES_IEEE_DCBX_SUPPORTED 0x00000008
++
++#define NDIS_QOS_CLASSIFICATION_SET_BY_MINIPORT_MASK 0xff000000
++#define NDIS_QOS_CLASSIFICATION_ENFORCED_BY_MINIPORT 0x01000000
++
++#define NDIS_QOS_CONDITION_RESERVED 0x0
++#define NDIS_QOS_CONDITION_DEFAULT 0x1
++#define NDIS_QOS_CONDITION_TCP_PORT 0x2
++#define NDIS_QOS_CONDITION_UDP_PORT 0x3
++#define NDIS_QOS_CONDITION_TCP_OR_UDP_PORT 0x4
++#define NDIS_QOS_CONDITION_ETHERTYPE 0x5
++#define NDIS_QOS_CONDITION_NETDIRECT_PORT 0x6
++#define NDIS_QOS_CONDITION_MAXIMUM 0x7
++
++#define NDIS_QOS_ACTION_PRIORITY 0x0
++#define NDIS_QOS_ACTION_MAXIMUM 0x1
++
++#define NDIS_QOS_PARAMETERS_ETS_CHANGED 0x00000001
++#define NDIS_QOS_PARAMETERS_ETS_CONFIGURED 0x00000002
++#define NDIS_QOS_PARAMETERS_PFC_CHANGED 0x00000100
++#define NDIS_QOS_PARAMETERS_PFC_CONFIGURED 0x00000200
++#define NDIS_QOS_PARAMETERS_CLASSIFICATION_CHANGED 0x00010000
++#define NDIS_QOS_PARAMETERS_CLASSIFICATION_CONFIGURED 0x00020000
++#define NDIS_QOS_PARAMETERS_WILLING 0x80000000
++
++#define NDIS_QOS_TSA_STRICT 0x0
++#define NDIS_QOS_TSA_CBS 0x1
++#define NDIS_QOS_TSA_ETS 0x2
++#define NDIS_QOS_TSA_MAXIMUM 0x3
++
++#define NDIS_PF_FUNCTION_ID (USHORT) -1
++#define NDIS_INVALID_VF_FUNCTION_ID (USHORT) -1
++#define NDIS_INVALID_RID (ULONG) -1
++#define NDIS_DEFAULT_VPORT_ID 0
++#define NDIS_DEFAULT_SWITCH_ID 0
++#define NDIS_INVALID_SWITCH_ID (ULONG) -1
++
++#define NDIS_NIC_SWITCH_PARAMETERS_CHANGE_MASK 0xffff0000
++#define NDIS_NIC_SWITCH_PARAMETERS_SWITCH_NAME_CHANGED 0x00010000
++
++#define NDIS_SRIOV_CAPS_SRIOV_SUPPORTED 0x00000001
++#define NDIS_SRIOV_CAPS_PF_MINIPORT 0x00000002
++#define NDIS_SRIOV_CAPS_VF_MINIPORT 0x00000004
++
++#define NDIS_NIC_SWITCH_VF_INFO_ARRAY_ENUM_ON_SPECIFIC_SWITCH 0x00000001
++
++#define NDIS_NIC_SWITCH_VPORT_PARAMS_LOOKAHEAD_SPLIT_ENABLED 0x00000001
++#define NDIS_NIC_SWITCH_VPORT_PARAMS_CHANGE_MASK 0xffff0000
++#define NDIS_NIC_SWITCH_VPORT_PARAMS_FLAGS_CHANGED 0x00010000
++#define NDIS_NIC_SWITCH_VPORT_PARAMS_NAME_CHANGED 0x00020000
++#define NDIS_NIC_SWITCH_VPORT_PARAMS_INT_MOD_CHANGED 0x00040000
++#define NDIS_NIC_SWITCH_VPORT_PARAMS_STATE_CHANGED 0x00080000
++#define NDIS_NIC_SWITCH_VPORT_PARAMS_PROCESSOR_AFFINITY_CHANGED 0x00100000
++
++#define NDIS_NIC_SWITCH_VPORT_INFO_ARRAY_ENUM_ON_SPECIFIC_FUNCTION 0x00000001
++#define NDIS_NIC_SWITCH_VPORT_INFO_ARRAY_ENUM_ON_SPECIFIC_SWITCH 0x00000002
++
++#define NDIS_NIC_SWITCH_VPORT_INFO_LOOKAHEAD_SPLIT_ENABLED 0x00000001
++
++ DEFINE_GUID (GUID_NDIS_NDK_CAPABILITIES, 0x7969ba4d, 0xdd80, 0x4bc7, 0xb3, 0xe6, 0x68, 0x04, 0x39, 0x97, 0xe5, 0x19);
++ DEFINE_GUID (GUID_NDIS_NDK_STATE, 0x530c69c9, 0x2f51, 0x49de, 0xa1, 0xaf, 0x08, 0x8d, 0x54, 0xff, 0xa4, 0x74);
++
++#define NDIS_NDK_CAPABILITIES_REVISION_1 1
++#define NDIS_NDK_STATISTICS_INFO_REVISION_1 1
++#define NDIS_NDK_CONNECTIONS_REVISION_1 1
++#define NDIS_NDK_LOCAL_ENDPOINTS_REVISION_1 1
++#define NDIS_QOS_CAPABILITIES_REVISION_1 1
++#define NDIS_QOS_CLASSIFICATION_ELEMENT_REVISION_1 1
++#define NDIS_QOS_PARAMETERS_REVISION_1 1
++#define NDIS_NIC_SWITCH_PARAMETERS_REVISION_1 1
++#define NDIS_NIC_SWITCH_DELETE_SWITCH_PARAMETERS_REVISION_1 1
++#define NDIS_NIC_SWITCH_INFO_REVISION_1 1
++#define NDIS_NIC_SWITCH_INFO_ARRAY_REVISION_1 1
++#define NDIS_NIC_SWITCH_VPORT_PARAMETERS_REVISION_1 1
++#define NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS_REVISION_1 1
++#define NDIS_NIC_SWITCH_VPORT_INFO_REVISION_1 1
++#define NDIS_NIC_SWITCH_VPORT_INFO_ARRAY_REVISION_1 1
++#define NDIS_NIC_SWITCH_VF_PARAMETERS_REVISION_1 1
++#define NDIS_NIC_SWITCH_FREE_VF_PARAMETERS_REVISION_1 1
++#define NDIS_NIC_SWITCH_VF_INFO_REVISION_1 1
++#define NDIS_NIC_SWITCH_VF_INFO_ARRAY_REVISION_1 1
++#define NDIS_SRIOV_CAPABILITIES_REVISION_1 1
++#define NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS_REVISION_1 1
++#define NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS_REVISION_1 1
++#define NDIS_SRIOV_READ_VF_CONFIG_BLOCK_PARAMETERS_REVISION_1 1
++#define NDIS_SRIOV_WRITE_VF_CONFIG_BLOCK_PARAMETERS_REVISION_1 1
++#define NDIS_SRIOV_RESET_VF_PARAMETERS_REVISION_1 1
++#define NDIS_SRIOV_SET_VF_POWER_STATE_PARAMETERS_REVISION_1 1
++#define NDIS_SRIOV_CONFIG_STATE_PARAMETERS_REVISION_1 1
++#define NDIS_SRIOV_VF_VENDOR_DEVICE_ID_INFO_REVISION_1 1
++#define NDIS_SRIOV_PROBED_BARS_INFO_REVISION_1 1
++#define NDIS_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS_REVISION_1 1
++#define NDIS_SRIOV_BAR_RESOURCES_INFO_REVISION_1 1
++#define NDIS_SRIOV_PF_LUID_INFO_REVISION_1 1
++#define NDIS_SRIOV_VF_SERIAL_NUMBER_INFO_REVISION_1 1
++#define NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO_REVISION_1 1
++#define NDIS_SWITCH_OBJECT_SERIALIZATION_VERSION_1 1
++#define NDIS_SWITCH_PORT_PROPERTY_SECURITY_REVISION_1 1
++#define NDIS_SWITCH_PORT_PROPERTY_VLAN_REVISION_1 1
++#define NDIS_SWITCH_PORT_PROPERTY_PROFILE_REVISION_1 1
++#define NDIS_SWITCH_PORT_PROPERTY_CUSTOM_REVISION_1 1
++#define NDIS_SWITCH_PORT_PROPERTY_PARAMETERS_REVISION_1 1
++#define NDIS_SWITCH_PORT_PROPERTY_DELETE_PARAMETERS_REVISION_1 1
++#define NDIS_SWITCH_PORT_PROPERTY_ENUM_PARAMETERS_REVISION_1 1
++#define NDIS_SWITCH_PORT_PROPERTY_ENUM_INFO_REVISION_1 1
++#define NDIS_SWITCH_PROPERTY_PARAMETERS_REVISION_1 1
++#define NDIS_SWITCH_PROPERTY_CUSTOM_REVISION_1 1
++#define NDIS_SWITCH_PORT_FEATURE_STATUS_PARAMETERS_REVISION_1 1
++#define NDIS_SWITCH_PORT_FEATURE_STATUS_CUSTOM_REVISION_1 1
++#define NDIS_SWITCH_PROPERTY_DELETE_PARAMETERS_REVISION_1 1
++#define NDIS_SWITCH_PROPERTY_ENUM_INFO_REVISION_1 1
++#define NDIS_SWITCH_PROPERTY_ENUM_PARAMETERS_REVISION_1 1
++#define NDIS_SWITCH_FEATURE_STATUS_CUSTOM_REVISION_1 1
++#define NDIS_SWITCH_PORT_PARAMETERS_REVISION_1 1
++#define NDIS_SWITCH_PORT_ARRAY_REVISION_1 1
++#define NDIS_SWITCH_PARAMETERS_REVISION_1 1
++#define NDIS_SWITCH_NIC_PARAMETERS_REVISION_1 1
++#define NDIS_SWITCH_NIC_ARRAY_REVISION_1 1
++#define NDIS_SWITCH_NIC_OID_REQUEST_REVISION_1 1
++#define NDIS_SWITCH_FEATURE_STATUS_PARAMETERS_REVISION_1 1
++#define NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 1
++
++#define NDIS_SIZEOF_NDK_CAPABILITIES_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NDK_CAPABILITIES, NdkInfo)
++#define NDIS_SIZEOF_NDK_STATISTICS_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NDK_STATISTICS_INFO, CounterSet)
++#define NDIS_SIZEOF_NDK_CONNECTIONS_REVISION_1(n) FIELD_OFFSET (NDIS_NDK_CONNECTIONS, Connections[n])
++#define NDIS_SIZEOF_NDK_LOCAL_ENDPOINTS_REVISION_1(n) FIELD_OFFSET (NDIS_NDK_LOCAL_ENDPOINTS, LocalEndpoints[n])
++#define NDIS_SIZEOF_QOS_CAPABILITIES_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_QOS_CAPABILITIES, MaxNumPfcEnabledTrafficClasses)
++#define NDIS_SIZEOF_QOS_CLASSIFICATION_ELEMENT_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_QOS_CLASSIFICATION_ELEMENT, ActionField)
++#define NDIS_SIZEOF_QOS_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_QOS_PARAMETERS, FirstClassificationElementOffset)
++#define NDIS_SIZEOF_NIC_SWITCH_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_PARAMETERS, NdisReserved3)
++#define NDIS_SIZEOF_NIC_SWITCH_DELETE_SWITCH_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_DELETE_SWITCH_PARAMETERS, SwitchId)
++#define NDIS_SIZEOF_NIC_SWITCH_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_INFO, NumActiveNonDefaultVPortVlanIds)
++#define NDIS_SIZEOF_NIC_SWITCH_INFO_ARRAY_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_INFO_ARRAY, ElementSize)
++#define NDIS_SIZEOF_NIC_SWITCH_VPORT_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_VPORT_PARAMETERS, LookaheadSize)
++#define NDIS_SIZEOF_NIC_SWITCH_DELETE_VPORT_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS, VPortId)
++#define NDIS_SIZEOF_NIC_SWITCH_VPORT_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_VPORT_INFO, NumFilters)
++#define NDIS_SIZEOF_NIC_SWITCH_VPORT_INFO_ARRAY_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_VPORT_INFO_ARRAY, ElementSize)
++#define NDIS_SIZEOF_NIC_SWITCH_VF_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_VF_PARAMETERS, RequestorId)
++#define NDIS_SIZEOF_NIC_SWITCH_FREE_VF_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_FREE_VF_PARAMETERS, VFId)
++#define NDIS_SIZEOF_NIC_SWITCH_VF_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_VF_INFO, RequestorId)
++#define NDIS_SIZEOF_NIC_SWITCH_VF_INFO_ARRAY_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_NIC_SWITCH_VF_INFO_ARRAY, ElementSize)
++#define NDIS_SIZEOF_SRIOV_CAPABILITIES_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_CAPABILITIES, SriovCapabilities)
++#define NDIS_SIZEOF_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS, BufferOffset)
++#define NDIS_SIZEOF_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS, BufferOffset)
++#define NDIS_SIZEOF_SRIOV_READ_VF_CONFIG_BLOCK_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_READ_VF_CONFIG_BLOCK_PARAMETERS, BufferOffset)
++#define NDIS_SIZEOF_SRIOV_WRITE_VF_CONFIG_BLOCK_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_WRITE_VF_CONFIG_BLOCK_PARAMETERS, BufferOffset)
++#define NDIS_SIZEOF_SRIOV_RESET_VF_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_RESET_VF_PARAMETERS, VFId)
++#define NDIS_SIZEOF_SRIOV_SET_VF_POWER_STATE_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_SET_VF_POWER_STATE_PARAMETERS, WakeEnable)
++#define NDIS_SIZEOF_SRIOV_CONFIG_STATE_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_CONFIG_STATE_PARAMETERS, Length)
++#define NDIS_SIZEOF_SRIOV_VF_VENDOR_DEVICE_ID_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_VF_VENDOR_DEVICE_ID_INFO, DeviceId)
++#define NDIS_SIZEOF_SRIOV_PROBED_BARS_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_PROBED_BARS_INFO, BaseRegisterValuesOffset)
++#define NDIS_SIZEOF_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS, DestVPortId)
++#define NDIS_SIZEOF_SRIOV_BAR_RESOURCES_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_BAR_RESOURCES_INFO, BarResourcesOffset)
++#define NDIS_SIZEOF_SRIOV_PF_LUID_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_PF_LUID_INFO, Luid)
++#define NDIS_SIZEOF_SRIOV_VF_SERIAL_NUMBER_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_VF_SERIAL_NUMBER_INFO, SerialNumber)
++#define NDIS_SIZEOF_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO, BlockMask)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_PROPERTY_SECURITY_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_PROPERTY_SECURITY, AllowTeaming)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_PROPERTY_VLAN_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_PROPERTY_VLAN, VlanProperties)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_PROPERTY_PROFILE_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_PROPERTY_PROFILE, CdnLabel)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_PROPERTY_CUSTOM_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_PROPERTY_CUSTOM, PropertyBufferOffset)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_PROPERTY_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_PROPERTY_PARAMETERS, Reserved)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_PROPERTY_ENUM_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_PROPERTY_ENUM_PARAMETERS, Reserved)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_PROPERTY_ENUM_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_PROPERTY_ENUM_INFO, PropertyBufferOffset)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_FEATURE_STATUS_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_FEATURE_STATUS_PARAMETERS, Reserved)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_FEATURE_STATUS_CUSTOM_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_FEATURE_STATUS_CUSTOM, FeatureStatusBufferOffset)
++#define NDIS_SIZEOF_NDIS_SWITCH_PROPERTY_CUSTOM_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PROPERTY_CUSTOM, PropertyBufferOffset)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_PROPERTY_DELETE_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_PROPERTY_DELETE_PARAMETERS, PropertyInstanceId)
++#define NDIS_SIZEOF_NDIS_SWITCH_PROPERTY_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PROPERTY_PARAMETERS, PropertyBufferOffset)
++#define NDIS_SIZEOF_NDIS_SWITCH_PROPERTY_ENUM_INFO_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PROPERTY_ENUM_INFO, PropertyBufferOffset)
++#define NDIS_SIZEOF_NDIS_SWITCH_PROPERTY_ENUM_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PROPERTY_ENUM_PARAMETERS, NumProperties)
++#define NDIS_SIZEOF_NDIS_SWITCH_FEATURE_STATUS_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_FEATURE_STATUS_PARAMETERS, FeatureStatusBufferLength)
++#define NDIS_SIZEOF_NDIS_SWITCH_PROPERTY_DELETE_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PROPERTY_DELETE_PARAMETERS, PropertyInstanceId)
++#define NDIS_SIZEOF_NDIS_SWITCH_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PARAMETERS, IsActive)
++#define NDIS_SIZEOF_NDIS_SWITCH_FEATURE_STATUS_CUSTOM_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_FEATURE_STATUS_CUSTOM, FeatureStatusCustomBufferOffset)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_PARAMETERS, PortState)
++#define NDIS_SIZEOF_NDIS_SWITCH_PORT_ARRAY_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_PORT_ARRAY, ElementSize)
++#define NDIS_SIZEOF_NDIS_SWITCH_NIC_OID_REQUEST_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_NIC_OID_REQUEST, OidRequest)
++#define NDIS_SIZEOF_NDIS_SWITCH_NIC_SAVE_STATE_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_NIC_SAVE_STATE, SaveDataOffset)
++#define NDIS_SIZEOF_NDIS_SWITCH_NIC_PARAMETERS_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_NIC_PARAMETERS, VFAssigned)
++#define NDIS_SIZEOF_NDIS_SWITCH_NIC_ARRAY_REVISION_1 RTL_SIZEOF_THROUGH_FIELD (NDIS_SWITCH_NIC_ARRAY, ElementSize)
++
++#define NDIS_SWITCH_PORT_PROPERTY_CUSTOM_GET_BUFFER(PPROPC) ((PVOID) ((PUCHAR) (PPROPC) + (PPROPC)->PropertyBufferOffset))
++#define NDIS_SWITCH_PORT_PROPERTY_PARAMETERS_GET_PROPERTY(PPARM) ((PVOID) ((PUCHAR) (PPARM) + (PPARM)->PropertyBufferOffset))
++#define NDIS_SWITCH_CREATE_PROPERTY_VERSION(VMAJOR, VMINOR) (((VMAJOR) << 8) + (VMINOR))
++#define NDIS_SWITCH_PORT_PROPERTY_ENUM_PARAMETERS_GET_FIRST_INFO(PEPARM) ((PNDIS_SWITCH_PORT_PROPERTY_ENUM_INFO) ((PUCHAR) (PEPARM) + (PEPARM)->FirstPropertyOffset))
++#define NDIS_SWITCH_PORT_PROPERTY_ENUM_INFO_GET_NEXT(PEINFO) ((PNDIS_SWITCH_PORT_PROPERTY_ENUM_INFO) ((ULONG_PTR) (PEINFO) + (PEINFO)->QwordAlignedPropertyBufferLength + sizeof (NDIS_SWITCH_PORT_PROPERTY_ENUM_INFO)))
++#define NDIS_SWITCH_PORT_PROPERTY_ENUM_INFO_GET_PROPERTY(PEINFO) ((PVOID) ((PUCHAR) (PEINFO) + (PEINFO)->PropertyBufferOffset))
++#define NDIS_SWITCH_CREATE_FEATURE_STATUS_VERSION(VMAJOR, VMINOR) (((VMAJOR) << 8) + (VMINOR))
++#define NDIS_SWITCH_PROPERTY_CUSTOM_GET_BUFFER(SWPROPC) ((PVOID) ((PUCHAR) (SWPROPC) + (SWPROPC)->PropertyBufferOffset))
++#define NDIS_SWITCH_PROPERTY_PARAMETERS_GET_PROPERTY(SWPARA) ((PVOID) ((PUCHAR) (SWPARA) + (SWPARA)->PropertyBufferOffset))
++#define NDIS_SWITCH_PROPERTY_ENUM_INFO_GET_NEXT(SWEINFO) ((PNDIS_SWITCH_PROPERTY_ENUM_INFO) ((ULONG_PTR) (SWEINFO) + (SWEINFO)->QwordAlignedPropertyBufferLength + sizeof (NDIS_SWITCH_PROPERTY_ENUM_INFO)))
++#define NDIS_SWITCH_PROPERTY_ENUM_INFO_GET_PROPERTY(SWEINFO) ((PVOID) ((PUCHAR) (SWEINFO) + (SWEINFO)->PropertyBufferOffset))
++#define NDIS_SWITCH_PROPERTY_ENUM_PARAMETERS_GET_FIRST_INFO(SWEPARM) ((PNDIS_SWITCH_PROPERTY_ENUM_INFO) ((PUCHAR) (SWEPARM) + (SWEPARM)->FirstPropertyOffset))
++#define NDIS_SWITCH_PORT_AT_ARRAY_INDEX(PA, IDX) ((PNDIS_SWITCH_PORT_PARAMETERS) ((PUCHAR) (PA) + (PA)->FirstElementOffset + ((PA)->ElementSize * (IDX))))
++#define NDIS_SWITCH_NIC_AT_ARRAY_INDEX(NA, IDX) ((PNDIS_SWITCH_NIC_PARAMETERS) ((PUCHAR) (NA) + (NA)->FirstElementOffset + ((NA)->ElementSize * (IDX))))
++
++#include <ndkinfo.h>
++#ifndef __MINGW32__
++#include <ws2def.h>
++#ifndef __CYGWIN__
++#include <ws2ipdef.h>
++#endif
++#endif
++
++ typedef struct _NDIS_NDK_PERFORMANCE_COUNTERS {
++ ULONG64 Connect;
++ ULONG64 Accept;
++ ULONG64 ConnectFailure;
++ ULONG64 ConnectionError;
++ ULONG64 ActiveConnection;
++ ULONG64 Reserved01;
++ ULONG64 Reserved02;
++ ULONG64 Reserved03;
++ ULONG64 Reserved04;
++ ULONG64 Reserved05;
++ ULONG64 Reserved06;
++ ULONG64 Reserved07;
++ ULONG64 Reserved08;
++ ULONG64 Reserved09;
++ ULONG64 Reserved10;
++ ULONG64 Reserved11;
++ ULONG64 Reserved12;
++ ULONG64 Reserved13;
++ ULONG64 Reserved14;
++ ULONG64 Reserved15;
++ ULONG64 Reserved16;
++ ULONG64 Reserved17;
++ ULONG64 Reserved18;
++ ULONG64 Reserved19;
++ ULONG64 Reserved20;
++ ULONG64 CQError;
++ ULONG64 RDMAInOctets;
++ ULONG64 RDMAOutOctets;
++ ULONG64 RDMAInFrames;
++ ULONG64 RDMAOutFrames;
++ } NDIS_NDK_PERFORMANCE_COUNTERS, *PNDIS_NDK_PERFORMANCE_COUNTERS;
++
++ typedef struct _NDIS_NDK_CAPABILITIES {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG MaxQpCount;
++ ULONG MaxCqCount;
++ ULONG MaxMrCount;
++ ULONG MaxPdCount;
++ ULONG MaxInboundReadLimit;
++ ULONG MaxOutboundReadLimit;
++ ULONG MaxMwCount;
++ ULONG MaxSrqCount;
++ ULONG64 MissingCounterMask;
++ NDK_ADAPTER_INFO *NdkInfo;
++ } NDIS_NDK_CAPABILITIES, *PNDIS_NDK_CAPABILITIES;
++
++ typedef struct _NDK_WMI_ADAPTER_INFO {
++ NDK_VERSION Version;
++ UINT32 VendorId;
++ UINT32 DeviceId;
++ ULONGLONG MaxRegistrationSize;
++ ULONGLONG MaxWindowSize;
++ ULONG FRMRPageCount;
++ ULONG MaxInitiatorRequestSge;
++ ULONG MaxReceiveRequestSge;
++ ULONG MaxReadRequestSge;
++ ULONG MaxTransferLength;
++ ULONG MaxInlineDataSize;
++ ULONG MaxInboundReadLimit;
++ ULONG MaxOutboundReadLimit;
++ ULONG MaxReceiveQueueDepth;
++ ULONG MaxInitiatorQueueDepth;
++ ULONG MaxSrqDepth;
++ ULONG MaxCqDepth;
++ ULONG LargeRequestThreshold;
++ ULONG MaxCallerData;
++ ULONG MaxCalleeData;
++ ULONG AdapterFlags;
++ } NDK_WMI_ADAPTER_INFO, *PNDK_WMI_ADAPTER_INFO;
++
++ typedef struct _NDIS_WMI_NDK_CAPABILITIES {
++ ULONG MaxQpCount;
++ ULONG MaxCqCount;
++ ULONG MaxMrCount;
++ ULONG MaxPdCount;
++ ULONG MaxInboundReadLimit;
++ ULONG MaxOutboundReadLimit;
++ ULONG MaxMwCount;
++ ULONG MaxSrqCount;
++ ULONG64 MissingCounterMask;
++ NDK_WMI_ADAPTER_INFO NdkInfo;
++ } NDIS_WMI_NDK_CAPABILITIES, *PNDIS_WMI_NDK_CAPABILITIES;
++
++ typedef struct _NDIS_NDK_STATISTICS_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_NDK_PERFORMANCE_COUNTERS CounterSet;
++ } NDIS_NDK_STATISTICS_INFO;
++
++ typedef struct _NDIS_NDK_CONNECTION_ENTRY {
++ SOCKADDR_INET Local;
++ SOCKADDR_INET Remote;
++ BOOLEAN UserModeOwner;
++ ULONG OwnerPid;
++ } NDIS_NDK_CONNECTION_ENTRY;
++
++ typedef struct _NDIS_NDK_CONNECTIONS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG Count;
++ BOOLEAN NDConnectionsMappedtoTCPConnections;
++ NDIS_NDK_CONNECTION_ENTRY Connections[1];
++ } NDIS_NDK_CONNECTIONS;
++
++ typedef struct _NDIS_NDK_LOCAL_ENDPOINT_ENTRY {
++ SOCKADDR_INET Local;
++ BOOLEAN UserModeOwner;
++ BOOLEAN Listener;
++ ULONG OwnerPid;
++ } NDIS_NDK_LOCAL_ENDPOINT_ENTRY;
++
++ typedef struct _NDIS_NDK_LOCAL_ENDPOINTS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG Count;
++ BOOLEAN NDLocalEndpointsMappedtoTCPLocalEndpoints;
++ NDIS_NDK_LOCAL_ENDPOINT_ENTRY LocalEndpoints[1];
++ } NDIS_NDK_LOCAL_ENDPOINTS;
++
++ typedef struct _NDIS_QOS_CAPABILITIES {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG MaxNumTrafficClasses;
++ ULONG MaxNumEtsCapableTrafficClasses;
++ ULONG MaxNumPfcEnabledTrafficClasses;
++ } NDIS_QOS_CAPABILITIES, *PNDIS_QOS_CAPABILITIES;
++
++ typedef struct _NDIS_QOS_CLASSIFICATION_ELEMENT {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ USHORT ConditionSelector;
++ USHORT ConditionField;
++ USHORT ActionSelector;
++ USHORT ActionField;
++ } NDIS_QOS_CLASSIFICATION_ELEMENT, *PNDIS_QOS_CLASSIFICATION_ELEMENT;
++
++ typedef struct _NDIS_QOS_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG NumTrafficClasses;
++ UCHAR PriorityAssignmentTable[NDIS_QOS_MAXIMUM_PRIORITIES];
++ UCHAR TcBandwidthAssignmentTable[NDIS_QOS_MAXIMUM_TRAFFIC_CLASSES];
++ UCHAR TsaAssignmentTable[NDIS_QOS_MAXIMUM_TRAFFIC_CLASSES];
++ ULONG PfcEnable;
++ ULONG NumClassificationElements;
++ ULONG ClassificationElementSize;
++ ULONG FirstClassificationElementOffset;
++ } NDIS_QOS_PARAMETERS, *PNDIS_QOS_PARAMETERS;
++
++ typedef NDIS_IF_COUNTED_STRING NDIS_NIC_SWITCH_FRIENDLYNAME, *PNDIS_NIC_SWITCH_FRIENDLYNAME;
++ typedef NDIS_IF_COUNTED_STRING NDIS_VPORT_NAME, *PNDIS_VPORT_NAME;
++ typedef ULONG NDIS_NIC_SWITCH_ID, *PNDIS_NIC_SWITCH_ID;
++ typedef USHORT NDIS_SRIOV_FUNCTION_ID, *PNDIS_SRIOV_FUNCTION_ID;
++ typedef ULONG NDIS_VF_RID, *PNDIS_VF_RID;
++
++ typedef enum _NDIS_NIC_SWITCH_TYPE {
++ NdisNicSwitchTypeUnspecified,
++ NdisNicSwitchTypeExternal,
++ NdisNicSwitchTypeMax
++ } NDIS_NIC_SWITCH_TYPE, *PNDIS_NIC_SWITCH_TYPE;
++
++ typedef struct _NDIS_NIC_SWITCH_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_NIC_SWITCH_TYPE SwitchType;
++ NDIS_NIC_SWITCH_ID SwitchId;
++ NDIS_NIC_SWITCH_FRIENDLYNAME SwitchFriendlyName;
++ ULONG NumVFs;
++ ULONG NdisReserved1;
++ ULONG NdisReserved2;
++ ULONG NdisReserved3;
++ } NDIS_NIC_SWITCH_PARAMETERS, *PNDIS_NIC_SWITCH_PARAMETERS;
++
++ typedef struct _NDIS_NIC_SWITCH_DELETE_SWITCH_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_NIC_SWITCH_ID SwitchId;
++ } NDIS_NIC_SWITCH_DELETE_SWITCH_PARAMETERS, *PNDIS_NIC_SWITCH_DELETE_SWITCH_PARAMETERS;
++
++ typedef struct _NDIS_NIC_SWITCH_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_NIC_SWITCH_TYPE SwitchType;
++ NDIS_NIC_SWITCH_ID SwitchId;
++ NDIS_NIC_SWITCH_FRIENDLYNAME SwitchFriendlyName;
++ ULONG NumVFs;
++ ULONG NumAllocatedVFs;
++ ULONG NumVPorts;
++ ULONG NumActiveVPorts;
++ ULONG NumQueuePairsForDefaultVPort;
++ ULONG NumQueuePairsForNonDefaultVPorts;
++ ULONG NumActiveDefaultVPortMacAddresses;
++ ULONG NumActiveNonDefaultVPortMacAddresses;
++ ULONG NumActiveDefaultVPortVlanIds;
++ ULONG NumActiveNonDefaultVPortVlanIds;
++ } NDIS_NIC_SWITCH_INFO, *PNDIS_NIC_SWITCH_INFO;
++
++ typedef struct _NDIS_NIC_SWITCH_INFO_ARRAY {
++ NDIS_OBJECT_HEADER Header;
++ ULONG FirstElementOffset;
++ ULONG NumElements;
++ ULONG ElementSize;
++ } NDIS_NIC_SWITCH_INFO_ARRAY, *PNDIS_NIC_SWITCH_INFO_ARRAY;
++
++ typedef enum _NDIS_NIC_SWITCH_VPORT_STATE {
++ NdisNicSwitchVPortStateUndefined,
++ NdisNicSwitchVPortStateActivated,
++ NdisNicSwitchVPortStateDeactivated,
++ NdisNicSwitchVPortStateMaximum
++ } NDIS_NIC_SWITCH_VPORT_STATE, *PNDIS_NIC_SWITCH_VPORT_STATE;
++
++ typedef enum _NDIS_NIC_SWITCH_VPORT_INTERRUPT_MODERATION {
++ NdisNicSwitchVPortInterruptModerationUndefined = 0,
++ NdisNicSwitchVPortInterruptModerationAdaptive = 1,
++ NdisNicSwitchVPortInterruptModerationOff = 2,
++ NdisNicSwitchVPortInterruptModerationLow = 100,
++ NdisNicSwitchVPortInterruptModerationMedium = 200,
++ NdisNicSwitchVPortInterruptModerationHigh = 300,
++ } NDIS_NIC_SWITCH_VPORT_INTERRUPT_MODERATION, *PNDIS_NIC_SWITCH_VPORT_INTERRUPT_MODERATION;
++
++ typedef struct _NDIS_NIC_SWITCH_VPORT_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_NIC_SWITCH_ID SwitchId;
++ NDIS_NIC_SWITCH_VPORT_ID VPortId;
++ NDIS_VPORT_NAME VPortName;
++ NDIS_SRIOV_FUNCTION_ID AttachedFunctionId;
++ ULONG NumQueuePairs;
++ NDIS_NIC_SWITCH_VPORT_INTERRUPT_MODERATION InterruptModeration;
++ NDIS_NIC_SWITCH_VPORT_STATE VPortState;
++ GROUP_AFFINITY ProcessorAffinity;
++ ULONG LookaheadSize;
++ } NDIS_NIC_SWITCH_VPORT_PARAMETERS, *PNDIS_NIC_SWITCH_VPORT_PARAMETERS;
++
++ typedef struct _NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_NIC_SWITCH_VPORT_ID VPortId;
++ } NDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS, *PNDIS_NIC_SWITCH_DELETE_VPORT_PARAMETERS;
++
++ typedef struct _NDIS_NIC_SWITCH_VPORT_INFO {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_NIC_SWITCH_VPORT_ID VPortId;
++ ULONG Flags;
++ NDIS_NIC_SWITCH_ID SwitchId;
++ NDIS_VPORT_NAME VPortName;
++ NDIS_SRIOV_FUNCTION_ID AttachedFunctionId;
++ ULONG NumQueuePairs;
++ NDIS_NIC_SWITCH_VPORT_INTERRUPT_MODERATION InterruptModeration;
++ NDIS_NIC_SWITCH_VPORT_STATE VPortState;
++ GROUP_AFFINITY ProcessorAffinity;
++ ULONG LookaheadSize;
++ ULONG NumFilters;
++ } NDIS_NIC_SWITCH_VPORT_INFO, *PNDIS_NIC_SWITCH_VPORT_INFO;
++
++ typedef struct _NDIS_NIC_SWITCH_VPORT_INFO_ARRAY {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_NIC_SWITCH_ID SwitchId;
++ NDIS_SRIOV_FUNCTION_ID AttachedFunctionId;
++ ULONG FirstElementOffset;
++ ULONG NumElements;
++ ULONG ElementSize;
++ } NDIS_NIC_SWITCH_VPORT_INFO_ARRAY, *PNDIS_NIC_SWITCH_VPORT_INFO_ARRAY;
++
++ typedef struct _NDIS_NIC_SWITCH_VF_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_NIC_SWITCH_ID SwitchId;
++ NDIS_VM_NAME VMName;
++ NDIS_VM_FRIENDLYNAME VMFriendlyName;
++ NDIS_SWITCH_NIC_NAME NicName;
++ USHORT MacAddressLength;
++ UCHAR PermanentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
++ UCHAR CurrentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
++ NDIS_SRIOV_FUNCTION_ID VFId;
++ NDIS_VF_RID RequestorId;
++ } NDIS_NIC_SWITCH_VF_PARAMETERS, *PNDIS_NIC_SWITCH_VF_PARAMETERS;
++
++ typedef struct _NDIS_NIC_SWITCH_FREE_VF_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SRIOV_FUNCTION_ID VFId;
++ } NDIS_NIC_SWITCH_FREE_VF_PARAMETERS, *PNDIS_NIC_SWITCH_FREE_VF_PARAMETERS;
++
++ typedef struct _NDIS_NIC_SWITCH_VF_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_NIC_SWITCH_ID SwitchId;
++ NDIS_VM_NAME VMName;
++ NDIS_VM_FRIENDLYNAME VMFriendlyName;
++ NDIS_SWITCH_NIC_NAME NicName;
++ USHORT MacAddressLength;
++ UCHAR PermanentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
++ UCHAR CurrentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
++ NDIS_SRIOV_FUNCTION_ID VFId;
++ NDIS_VF_RID RequestorId;
++ } NDIS_NIC_SWITCH_VF_INFO, *PNDIS_NIC_SWITCH_VF_INFO;
++
++ typedef struct _NDIS_NIC_SWITCH_VF_INFO_ARRAY {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_NIC_SWITCH_ID SwitchId;
++ ULONG FirstElementOffset;
++ ULONG NumElements;
++ ULONG ElementSize;
++ } NDIS_NIC_SWITCH_VF_INFO_ARRAY, *PNDIS_NIC_SWITCH_VF_INFO_ARRAY;
++
++ typedef struct _NDIS_SRIOV_CAPABILITIES {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG SriovCapabilities;
++ } NDIS_SRIOV_CAPABILITIES, *PNDIS_SRIOV_CAPABILITIES;
++
++ typedef struct _NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_SRIOV_FUNCTION_ID VFId;
++ ULONG Offset;
++ ULONG Length;
++ ULONG BufferOffset;
++ } NDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS, *PNDIS_SRIOV_READ_VF_CONFIG_SPACE_PARAMETERS;
++
++ typedef struct _NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_SRIOV_FUNCTION_ID VFId;
++ ULONG Offset;
++ ULONG Length;
++ ULONG BufferOffset;
++ } NDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS, *PNDIS_SRIOV_WRITE_VF_CONFIG_SPACE_PARAMETERS;
++
++ typedef struct _NDIS_SRIOV_READ_VF_CONFIG_BLOCK_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_SRIOV_FUNCTION_ID VFId;
++ ULONG BlockId;
++ ULONG Length;
++ ULONG BufferOffset;
++ } NDIS_SRIOV_READ_VF_CONFIG_BLOCK_PARAMETERS, *PNDIS_SRIOV_READ_VF_CONFIG_BLOCK_PARAMETERS;
++
++ typedef struct _NDIS_SRIOV_WRITE_VF_CONFIG_BLOCK_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_SRIOV_FUNCTION_ID VFId;
++ ULONG BlockId;
++ ULONG Length;
++ ULONG BufferOffset;
++ } NDIS_SRIOV_WRITE_VF_CONFIG_BLOCK_PARAMETERS, *PNDIS_SRIOV_WRITE_VF_CONFIG_BLOCK_PARAMETERS;
++
++ typedef struct _NDIS_SRIOV_RESET_VF_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_SRIOV_FUNCTION_ID VFId;
++ } NDIS_SRIOV_RESET_VF_PARAMETERS, *PNDIS_SRIOV_RESET_VF_PARAMETERS;
++
++ typedef struct _NDIS_SRIOV_SET_VF_POWER_STATE_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_SRIOV_FUNCTION_ID VFId;
++ NDIS_DEVICE_POWER_STATE PowerState;
++ BOOLEAN WakeEnable;
++ } NDIS_SRIOV_SET_VF_POWER_STATE_PARAMETERS, *PNDIS_SRIOV_SET_VF_POWER_STATE_PARAMETERS;
++
++ typedef struct _NDIS_SRIOV_CONFIG_STATE_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG BlockId;
++ ULONG Length;
++ } NDIS_SRIOV_CONFIG_STATE_PARAMETERS, *PNDIS_SRIOV_CONFIG_STATE_PARAMETERS;
++
++ typedef struct _NDIS_SRIOV_VF_VENDOR_DEVICE_ID_INFO {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_SRIOV_FUNCTION_ID VFId;
++ USHORT VendorId;
++ USHORT DeviceId;
++ } NDIS_SRIOV_VF_VENDOR_DEVICE_ID_INFO, *PNDIS_SRIOV_VF_VENDOR_DEVICE_ID_INFO;
++
++ typedef struct _NDIS_SRIOV_PROBED_BARS_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG BaseRegisterValuesOffset;
++ } NDIS_SRIOV_PROBED_BARS_INFO, *PNDIS_SRIOV_PROBED_BARS_INFO;
++
++ typedef struct _NDIS_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_RECEIVE_FILTER_ID FilterId;
++ NDIS_RECEIVE_QUEUE_ID SourceQueueId;
++ NDIS_NIC_SWITCH_VPORT_ID SourceVPortId;
++ NDIS_RECEIVE_QUEUE_ID DestQueueId;
++ NDIS_NIC_SWITCH_VPORT_ID DestVPortId;
++ } NDIS_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS, *PNDIS_RECEIVE_FILTER_MOVE_FILTER_PARAMETERS;
++
++ typedef struct _NDIS_SRIOV_BAR_RESOURCES_INFO {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_SRIOV_FUNCTION_ID VFId;
++ USHORT BarIndex;
++ ULONG BarResourcesOffset;
++ } NDIS_SRIOV_BAR_RESOURCES_INFO, *PNDIS_SRIOV_BAR_RESOURCES_INFO;
++
++ typedef struct _NDIS_SRIOV_PF_LUID_INFO {
++ NDIS_OBJECT_HEADER Header;
++ LUID Luid;
++ } NDIS_SRIOV_PF_LUID_INFO, *PNDIS_SRIOV_PF_LUID_INFO;
++
++ typedef struct _NDIS_SRIOV_VF_SERIAL_NUMBER_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG SerialNumber;
++ } NDIS_SRIOV_VF_SERIAL_NUMBER_INFO, *PNDIS_SRIOV_VF_SERIAL_NUMBER_INFO;
++
++ typedef struct _NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG64 BlockMask;
++ } NDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO, *PNDIS_SRIOV_VF_INVALIDATE_CONFIG_BLOCK_INFO;
++
++ typedef GUID NDIS_SWITCH_OBJECT_INSTANCE_ID, *PNDIS_SWITCH_OBJECT_INSTANCE_ID;
++ typedef GUID NDIS_SWITCH_OBJECT_ID, *PNDIS_SWITCH_OBJECT_ID;
++ typedef USHORT NDIS_SWITCH_OBJECT_VERSION, *PNDIS_SWITCH_OBJECT_VERSION;
++ typedef USHORT NDIS_SWITCH_OBJECT_SERIALIZATION_VERSION, *PNDIS_SWITCH_OBJECT_SERIALIZATION_VERSION;
++#ifndef _NDIS_SWITCH_PORT_ID
++#define _NDIS_SWITCH_PORT_ID NDIS_SWITCH_PORT_ID
++ typedef UINT32 NDIS_SWITCH_PORT_ID, *PNDIS_SWITCH_PORT_ID;
++ typedef USHORT NDIS_SWITCH_NIC_INDEX, *PNDIS_SWITCH_NIC_INDEX;
++#endif
++
++ typedef enum _NDIS_SWITCH_PORT_PROPERTY_TYPE {
++ NdisSwitchPortPropertyTypeUndefined,
++ NdisSwitchPortPropertyTypeCustom,
++ NdisSwitchPortPropertyTypeSecurity,
++ NdisSwitchPortPropertyTypeVlan,
++ NdisSwitchPortPropertyTypeProfile,
++ NdisSwitchPortPropertyTypeMaximum
++ } NDIS_SWITCH_PORT_PROPERTY_TYPE, *PNDIS_SWITCH_PORT_PROPERTY_TYPE;
++
++ typedef struct _NDIS_SWITCH_PORT_PROPERTY_SECURITY {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ BOOLEAN AllowMacSpoofing;
++ BOOLEAN AllowIeeePriorityTag;
++ UINT32 VirtualSubnetId;
++ BOOLEAN AllowTeaming;
++ } NDIS_SWITCH_PORT_PROPERTY_SECURITY, *PNDIS_SWITCH_PORT_PROPERTY_SECURITY;
++
++ typedef enum _NDIS_SWITCH_PORT_VLAN_MODE {
++ NdisSwitchPortVlanModeUnknown = 0,
++ NdisSwitchPortVlanModeAccess = 1,
++ NdisSwitchPortVlanModeTrunk = 2,
++ NdisSwitchPortVlanModePrivate = 3,
++ NdisSwitchPortVlanModeMax = 4
++ } NDIS_SWITCH_PORT_VLAN_MODE, *PNDIS_SWITCH_PORT_VLAN_MODE;
++
++ typedef enum _NDIS_SWITCH_PORT_PVLAN_MODE {
++ NdisSwitchPortPvlanModeUndefined = 0,
++ NdisSwitchPortPvlanModeIsolated,
++ NdisSwitchPortPvlanModeCommunity,
++ NdisSwitchPortPvlanModePromiscuous
++ } NDIS_SWITCH_PORT_PVLAN_MODE, *PNDIS_SWITCH_PORT_PVLAN_MODE;
++
++ typedef struct _NDIS_SWITCH_PORT_PROPERTY_VLAN {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PORT_VLAN_MODE OperationMode;
++ _ANONYMOUS_UNION union {
++ struct {
++ UINT16 AccessVlanId;
++ UINT16 NativeVlanId;
++ UINT64 PruneVlanIdArray[64];
++ UINT64 TrunkVlanIdArray[64];
++ } VlanProperties;
++ struct {
++ NDIS_SWITCH_PORT_PVLAN_MODE PvlanMode;
++ UINT16 PrimaryVlanId;
++ _ANONYMOUS_UNION union {
++ UINT16 SecondaryVlanId;
++ UINT64 SecondaryVlanIdArray[64];
++ };
++ } PvlanProperties;
++ };
++ } NDIS_SWITCH_PORT_PROPERTY_VLAN, *PNDIS_SWITCH_PORT_PROPERTY_VLAN;
++
++ typedef struct _NDIS_SWITCH_PORT_PROPERTY_PROFILE {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PORT_PROPERTY_PROFILE_NAME ProfileName;
++ GUID ProfileId;
++ NDIS_VENDOR_NAME VendorName;
++ GUID VendorId;
++ UINT32 ProfileData;
++ GUID NetCfgInstanceId;
++ struct {
++ UINT32 PciSegmentNumber:16;
++ UINT32 PciBusNumber:8;
++ UINT32 PciDeviceNumber:5;
++ UINT32 PciFunctionNumber:3;
++ } PciLocation;
++ UINT32 CdnLabelId;
++ NDIS_SWITCH_PORT_PROPERTY_PROFILE_CDN_LABEL CdnLabel;
++ } NDIS_SWITCH_PORT_PROPERTY_PROFILE, *PNDIS_SWITCH_PORT_PROPERTY_PROFILE;
++
++ typedef struct _NDIS_SWITCH_PORT_PROPERTY_CUSTOM {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG PropertyBufferLength;
++ ULONG PropertyBufferOffset;
++ } NDIS_SWITCH_PORT_PROPERTY_CUSTOM, *PNDIS_SWITCH_PORT_PROPERTY_CUSTOM;
++
++ typedef struct _NDIS_SWITCH_PORT_PROPERTY_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PORT_ID PortId;
++ NDIS_SWITCH_PORT_PROPERTY_TYPE PropertyType;
++ NDIS_SWITCH_OBJECT_ID PropertyId;
++ NDIS_SWITCH_OBJECT_VERSION PropertyVersion;
++ NDIS_SWITCH_OBJECT_SERIALIZATION_VERSION SerializationVersion;
++ NDIS_SWITCH_OBJECT_INSTANCE_ID PropertyInstanceId;
++ ULONG PropertyBufferLength;
++ ULONG PropertyBufferOffset;
++ ULONG Reserved;
++ } NDIS_SWITCH_PORT_PROPERTY_PARAMETERS, *PNDIS_SWITCH_PORT_PROPERTY_PARAMETERS;
++
++ typedef struct _NDIS_SWITCH_PORT_PROPERTY_DELETE_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PORT_ID PortId;
++ NDIS_SWITCH_PORT_PROPERTY_TYPE PropertyType;
++ NDIS_SWITCH_OBJECT_ID PropertyId;
++ NDIS_SWITCH_OBJECT_INSTANCE_ID PropertyInstanceId;
++ } NDIS_SWITCH_PORT_PROPERTY_DELETE_PARAMETERS, *PNDIS_SWITCH_PORT_PROPERTY_DELETE_PARAMETERS;
++
++ typedef struct _NDIS_SWITCH_PORT_PROPERTY_ENUM_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PORT_ID PortId;
++ NDIS_SWITCH_PORT_PROPERTY_TYPE PropertyType;
++ NDIS_SWITCH_OBJECT_ID PropertyId;
++ NDIS_SWITCH_OBJECT_SERIALIZATION_VERSION SerializationVersion;
++ ULONG FirstPropertyOffset;
++ ULONG NumProperties;
++ USHORT Reserved;
++ } NDIS_SWITCH_PORT_PROPERTY_ENUM_PARAMETERS, *PNDIS_SWITCH_PORT_PROPERTY_ENUM_PARAMETERS;
++
++ typedef struct _NDIS_SWITCH_PORT_PROPERTY_ENUM_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_OBJECT_VERSION PropertyVersion;
++ NDIS_SWITCH_OBJECT_INSTANCE_ID PropertyInstanceId;
++ ULONG QwordAlignedPropertyBufferLength;
++ ULONG PropertyBufferLength;
++ ULONG PropertyBufferOffset;
++ } NDIS_SWITCH_PORT_PROPERTY_ENUM_INFO, *PNDIS_SWITCH_PORT_PROPERTY_ENUM_INFO;
++
++ typedef enum _NDIS_SWITCH_PORT_FEATURE_STATUS_TYPE {
++ NdisSwitchPortFeatureStatusTypeUndefined,
++ NdisSwitchPortFeatureStatusTypeCustom,
++ NdisSwitchPortFeatureStatusTypeMaximum
++ } NDIS_SWITCH_PORT_FEATURE_STATUS_TYPE, *PNDIS_SWITCH_PORT_FEATURE_STATUS_TYPE;
++
++ typedef struct _NDIS_SWITCH_PORT_FEATURE_STATUS_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PORT_ID PortId;
++ NDIS_SWITCH_PORT_FEATURE_STATUS_TYPE FeatureStatusType;
++ NDIS_SWITCH_OBJECT_ID FeatureStatusId;
++ NDIS_SWITCH_OBJECT_VERSION FeatureStatusVersion;
++ NDIS_SWITCH_OBJECT_SERIALIZATION_VERSION SerializationVersion;
++ NDIS_SWITCH_OBJECT_INSTANCE_ID FeatureStatusInstanceId;
++ ULONG FeatureStatusBufferLength;
++ ULONG FeatureStatusBufferOffset;
++ ULONG Reserved;
++ } NDIS_SWITCH_PORT_FEATURE_STATUS_PARAMETERS, *PNDIS_SWITCH_PORT_FEATURE_STATUS_PARAMETERS;
++
++ typedef struct _NDIS_SWITCH_PORT_FEATURE_STATUS_CUSTOM {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG FeatureStatusBufferLength;
++ ULONG FeatureStatusBufferOffset;
++ } NDIS_SWITCH_PORT_FEATURE_STATUS_CUSTOM, *PNDIS_SWITCH_PORT_FEATURE_STATUS_CUSTOM;
++
++ typedef enum _NDIS_SWITCH_PROPERTY_TYPE {
++ NdisSwitchPropertyTypeUndefined,
++ NdisSwitchPropertyTypeCustom,
++ NdisSwitchPropertyTypeMaximum
++ } NDIS_SWITCH_PROPERTY_TYPE, *PNDIS_SWITCH_PROPERTY_TYPE;
++
++ typedef struct _NDIS_SWITCH_PROPERTY_CUSTOM {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG PropertyBufferLength;
++ ULONG PropertyBufferOffset;
++ } NDIS_SWITCH_PROPERTY_CUSTOM, *PNDIS_SWITCH_PROPERTY_CUSTOM;
++
++ typedef struct _NDIS_SWITCH_PROPERTY_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PROPERTY_TYPE PropertyType;
++ NDIS_SWITCH_OBJECT_ID PropertyId;
++ NDIS_SWITCH_OBJECT_VERSION PropertyVersion;
++ NDIS_SWITCH_OBJECT_SERIALIZATION_VERSION SerializationVersion;
++ NDIS_SWITCH_OBJECT_INSTANCE_ID PropertyInstanceId;
++ ULONG PropertyBufferLength;
++ ULONG PropertyBufferOffset;
++ } NDIS_SWITCH_PROPERTY_PARAMETERS, *PNDIS_SWITCH_PROPERTY_PARAMETERS;
++
++ typedef struct _NDIS_SWITCH_PROPERTY_DELETE_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PROPERTY_TYPE PropertyType;
++ NDIS_SWITCH_OBJECT_ID PropertyId;
++ NDIS_SWITCH_OBJECT_INSTANCE_ID PropertyInstanceId;
++ } NDIS_SWITCH_PROPERTY_DELETE_PARAMETERS, *PNDIS_SWITCH_PROPERTY_DELETE_PARAMETERS;
++
++ typedef struct _NDIS_SWITCH_PROPERTY_ENUM_INFO {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_OBJECT_INSTANCE_ID PropertyInstanceId;
++ NDIS_SWITCH_OBJECT_VERSION PropertyVersion;
++ ULONG QwordAlignedPropertyBufferLength;
++ ULONG PropertyBufferLength;
++ ULONG PropertyBufferOffset;
++ } NDIS_SWITCH_PROPERTY_ENUM_INFO, *PNDIS_SWITCH_PROPERTY_ENUM_INFO;
++
++ typedef struct _NDIS_SWITCH_PROPERTY_ENUM_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PROPERTY_TYPE PropertyType;
++ NDIS_SWITCH_OBJECT_ID PropertyId;
++ NDIS_SWITCH_OBJECT_SERIALIZATION_VERSION SerializationVersion;
++ ULONG FirstPropertyOffset;
++ ULONG NumProperties;
++ } NDIS_SWITCH_PROPERTY_ENUM_PARAMETERS, *PNDIS_SWITCH_PROPERTY_ENUM_PARAMETERS;
++
++ typedef enum _NDIS_SWITCH_FEATURE_STATUS_TYPE {
++ NdisSwitchFeatureStatusTypeUndefined,
++ NdisSwitchFeatureStatusTypeCustom,
++ NdisSwitchFeatureStatusTypeMaximum
++ } NDIS_SWITCH_FEATURE_STATUS_TYPE, *PNDIS_SWITCH_FEATURE_STATUS_TYPE;
++
++ typedef struct _NDIS_SWITCH_FEATURE_STATUS_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_FEATURE_STATUS_TYPE FeatureStatusType;
++ NDIS_SWITCH_OBJECT_ID FeatureStatusId;
++ NDIS_SWITCH_OBJECT_INSTANCE_ID FeatureStatusInstanceId;
++ NDIS_SWITCH_OBJECT_VERSION FeatureStatusVersion;
++ NDIS_SWITCH_OBJECT_SERIALIZATION_VERSION SerializationVersion;
++ ULONG FeatureStatusBufferOffset;
++ ULONG FeatureStatusBufferLength;
++ } NDIS_SWITCH_FEATURE_STATUS_PARAMETERS, *PNDIS_SWITCH_FEATURE_STATUS_PARAMETERS;
++
++ typedef struct _NDIS_SWITCH_FEATURE_STATUS_CUSTOM {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ ULONG FeatureStatusCustomBufferLength;
++ ULONG FeatureStatusCustomBufferOffset;
++ } NDIS_SWITCH_FEATURE_STATUS_CUSTOM, *PNDIS_SWITCH_FEATURE_STATUS_CUSTOM;
++
++ typedef struct _NDIS_SWITCH_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_NAME SwitchName;
++ NDIS_SWITCH_FRIENDLYNAME SwitchFriendlyName;
++ UINT32 NumSwitchPorts;
++ BOOLEAN IsActive;
++ } NDIS_SWITCH_PARAMETERS, *PNDIS_SWITCH_PARAMETERS;
++
++ typedef enum _NDIS_SWITCH_PORT_TYPE {
++ NdisSwitchPortTypeGeneric = 0,
++ NdisSwitchPortTypeExternal = 1,
++ NdisSwitchPortTypeSynthetic = 2,
++ NdisSwitchPortTypeEmulated = 3,
++ NdisSwitchPortTypeInternal = 4
++ } NDIS_SWITCH_PORT_TYPE;
++
++ typedef enum _NDIS_SWITCH_PORT_STATE {
++ NdisSwitchPortStateUnknown = 0,
++ NdisSwitchPortStateCreated = 1,
++ NdisSwitchPortStateTeardown = 2,
++ NdisSwitchPortStateDeleted = 3
++ } NDIS_SWITCH_PORT_STATE;
++
++ typedef struct _NDIS_SWITCH_PORT_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PORT_ID PortId;
++ NDIS_SWITCH_PORT_NAME PortName;
++ NDIS_SWITCH_PORT_FRIENDLYNAME PortFriendlyName;
++ NDIS_SWITCH_PORT_TYPE PortType;
++ BOOLEAN IsValidationPort;
++ NDIS_SWITCH_PORT_STATE PortState;
++ } NDIS_SWITCH_PORT_PARAMETERS, *PNDIS_SWITCH_PORT_PARAMETERS;
++
++ typedef struct _NDIS_SWITCH_PORT_ARRAY {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ USHORT FirstElementOffset;
++ ULONG NumElements;
++ ULONG ElementSize;
++ } NDIS_SWITCH_PORT_ARRAY, *PNDIS_SWITCH_PORT_ARRAY;
++
++ typedef enum _NDIS_SWITCH_NIC_TYPE {
++ NdisSwitchNicTypeExternal = 0,
++ NdisSwitchNicTypeSynthetic = 1,
++ NdisSwitchNicTypeEmulated = 2,
++ NdisSwitchNicTypeInternal = 3
++ } NDIS_SWITCH_NIC_TYPE;
++
++ typedef enum _NDIS_SWITCH_NIC_STATE {
++ NdisSwitchNicStateUnknown = 0,
++ NdisSwitchNicStateCreated = 1,
++ NdisSwitchNicStateConnected = 2,
++ NdisSwitchNicStateDisconnected = 3,
++ NdisSwitchNicStateDeleted = 4
++ } NDIS_SWITCH_NIC_STATE;
++
++ typedef struct _NDIS_SWITCH_NIC_PARAMETERS {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_NIC_NAME NicName;
++ NDIS_SWITCH_NIC_FRIENDLYNAME NicFriendlyName;
++ NDIS_SWITCH_PORT_ID PortId;
++ NDIS_SWITCH_NIC_INDEX NicIndex;
++ NDIS_SWITCH_NIC_TYPE NicType;
++ NDIS_SWITCH_NIC_STATE NicState;
++ NDIS_VM_NAME VmName;
++ NDIS_VM_FRIENDLYNAME VmFriendlyName;
++ GUID NetCfgInstanceId;
++ ULONG MTU;
++ USHORT NumaNodeId;
++ UCHAR PermanentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
++ UCHAR VMMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
++ UCHAR CurrentMacAddress[NDIS_MAX_PHYS_ADDRESS_LENGTH];
++ BOOLEAN VFAssigned;
++ } NDIS_SWITCH_NIC_PARAMETERS, *PNDIS_SWITCH_NIC_PARAMETERS;
++
++ typedef struct _NDIS_SWITCH_NIC_ARRAY {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ USHORT FirstElementOffset;
++ ULONG NumElements;
++ ULONG ElementSize;
++ } NDIS_SWITCH_NIC_ARRAY, *PNDIS_SWITCH_NIC_ARRAY;
++
++ typedef struct _NDIS_OID_REQUEST NDIS_OID_REQUEST, *PNDIS_OID_REQUEST;
++
++ typedef struct _NDIS_SWITCH_NIC_OID_REQUEST {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PORT_ID SourcePortId;
++ NDIS_SWITCH_NIC_INDEX SourceNicIndex;
++ NDIS_SWITCH_PORT_ID DestinationPortId;
++ NDIS_SWITCH_NIC_INDEX DestinationNicIndex;
++ PNDIS_OID_REQUEST OidRequest;
++ } NDIS_SWITCH_NIC_OID_REQUEST, *PNDIS_SWITCH_NIC_OID_REQUEST;
++
++ typedef struct _NDIS_SWITCH_NIC_SAVE_STATE {
++ NDIS_OBJECT_HEADER Header;
++ ULONG Flags;
++ NDIS_SWITCH_PORT_ID PortId;
++ NDIS_SWITCH_NIC_INDEX NicIndex;
++ GUID ExtensionId;
++ NDIS_SWITCH_EXTENSION_FRIENDLYNAME ExtensionFriendlyName;
++ GUID FeatureClassId;
++ USHORT SaveDataSize;
++ USHORT SaveDataOffset;
++ } NDIS_SWITCH_NIC_SAVE_STATE, *PNDIS_SWITCH_NIC_SAVE_STATE;
++#endif
++
++ typedef struct _NDIS_PORT_STATE {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_MEDIA_CONNECT_STATE MediaConnectState;
++ ULONG64 XmitLinkSpeed;
++ ULONG64 RcvLinkSpeed;
++ NET_IF_DIRECTION_TYPE Direction;
++ NDIS_PORT_CONTROL_STATE SendControlState;
++ NDIS_PORT_CONTROL_STATE RcvControlState;
++ NDIS_PORT_AUTHORIZATION_STATE SendAuthorizationState;
++ NDIS_PORT_AUTHORIZATION_STATE RcvAuthorizationState;
++ ULONG Flags;
++ } NDIS_PORT_STATE, *PNDIS_PORT_STATE;
++
++ typedef struct _NDIS_PORT_CHARACTERISTICS {
++ NDIS_OBJECT_HEADER Header;
++ NDIS_PORT_NUMBER PortNumber;
++ ULONG Flags;
++ NDIS_PORT_TYPE Type;
++ NDIS_MEDIA_CONNECT_STATE MediaConnectState;
++ ULONG64 XmitLinkSpeed;
++ ULONG64 RcvLinkSpeed;
++ NET_IF_DIRECTION_TYPE Direction;
++ NDIS_PORT_CONTROL_STATE SendControlState;
++ NDIS_PORT_CONTROL_STATE RcvControlState;
++ NDIS_PORT_AUTHORIZATION_STATE SendAuthorizationState;
++ NDIS_PORT_AUTHORIZATION_STATE RcvAuthorizationState;
++ } NDIS_PORT_CHARACTERISTICS, *PNDIS_PORT_CHARACTERISTICS;
++
++ typedef struct _NDIS_PORT NDIS_PORT, *PNDIS_PORT;
++
++ struct _NDIS_PORT {
++ PNDIS_PORT Next;
++ PVOID NdisReserved;
++ PVOID MiniportReserved;
++ PVOID ProtocolReserved;
++ NDIS_PORT_CHARACTERISTICS PortCharacteristics;
++ };
++
++ typedef struct _NDIS_PORT_ARRAY {
++ NDIS_OBJECT_HEADER Header;
++ ULONG NumberOfPorts;
++ ULONG OffsetFirstPort;
++ ULONG ElementSize;
++ NDIS_PORT_CHARACTERISTICS Ports[1];
++ } NDIS_PORT_ARRAY, *PNDIS_PORT_ARRAY;
++#endif
++#endif
++
++#ifdef __cplusplus
++}
++#endif
++
++/*
++#endif
++ */
++#endif
+--- w32api-5.0.2/include/ndkinfo.h.orig 1970-01-01 01:00:00.000000000 +0100
++++ w32api-5.0.2/include/ndkinfo.h 2018-09-22 09:40:16.426289627 +0200
+@@ -0,0 +1,55 @@
++/* https://github.com/Alexpux/mingw-w64/raw/master/mingw-w64-headers/include/ndkinfo.h */
++/**
++ * This file is part of the mingw-w64 runtime package.
++ * No warranty is given; refer to the file DISCLAIMER within this package.
++ */
++
++#ifndef _NDKINFO_H_
++#define _NDKINFO_H_
++
++/*
++#include <winapifamily.h>
++
++#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
++ */
++
++#define NDK_ADAPTER_FLAG_IN_ORDER_DMA_SUPPORTED 0x1
++#define NDK_ADAPTER_FLAG_RDMA_READ_SINK_NOT_REQUIRED 0x2
++#define NDK_ADAPTER_FLAG_CQ_INTERRUPT_MODERATION_SUPPORTED 0x4
++#define NDK_ADAPTER_FLAG_MULTI_ENGINE_SUPPORTED 0x8
++#define NDK_ADAPTER_FLAG_CQ_RESIZE_SUPPORTED 0x100
++#define NDK_ADAPTER_FLAG_LOOPBACK_CONNECTIONS_SUPPORTED 0x10000
++
++typedef struct {
++ USHORT Major;
++ USHORT Minor;
++} NDK_VERSION;
++
++typedef struct _NDK_ADAPTER_INFO {
++ NDK_VERSION Version;
++ UINT32 VendorId;
++ UINT32 DeviceId;
++ SIZE_T MaxRegistrationSize;
++ SIZE_T MaxWindowSize;
++ ULONG FRMRPageCount;
++ ULONG MaxInitiatorRequestSge;
++ ULONG MaxReceiveRequestSge;
++ ULONG MaxReadRequestSge;
++ ULONG MaxTransferLength;
++ ULONG MaxInlineDataSize;
++ ULONG MaxInboundReadLimit;
++ ULONG MaxOutboundReadLimit;
++ ULONG MaxReceiveQueueDepth;
++ ULONG MaxInitiatorQueueDepth;
++ ULONG MaxSrqDepth;
++ ULONG MaxCqDepth;
++ ULONG LargeRequestThreshold;
++ ULONG MaxCallerData;
++ ULONG MaxCalleeData;
++ ULONG AdapterFlags;
++} NDK_ADAPTER_INFO;
++
++/*
++#endif
++ */
++#endif
+--- w32api-5.0.2/include/winsock2.h.orig 2017-11-28 14:28:34.000000000 +0100
++++ w32api-5.0.2/include/winsock2.h 2018-09-24 21:27:52.022015050 +0200
+@@ -627,6 +627,7 @@
+ typedef int (PASCAL *LPFN_WSAASYNCSELECT) (SOCKET, HWND, u_int, long);
+
+ typedef struct sockaddr_storage SOCKADDR_STORAGE, *PSOCKADDR_STORAGE;
++typedef u_short ADDRESS_FAMILY;
+
+ WINSOCK_API_LINKAGE SOCKET WINAPI WSAAccept (SOCKET, struct sockaddr *, LPINT, LPCONDITIONPROC, DWORD);
+
+--- w32api/include/iptypes.h.orig 2017-11-28 19:03:04.000000000 +0100
++++ w32api/include/iptypes.h 2018-09-24 21:51:51.068665286 +0200
+@@ -124,6 +124,16 @@
+ ScopeLevelOrganization = 8,
+ ScopeLevelGlobal = 14
++, ScopeLevelCount = 16
+ } SCOPE_LEVEL;
++typedef struct _SCOPE_ID {
++ _ANONYMOUS_UNION union {
++ _ANONYMOUS_STRUCT struct {
++ ULONG Zone : 28;
++ ULONG Level : 4;
++ };
++ ULONG Value;
++ };
++} SCOPE_ID, *PSCOPE_ID;
+ typedef struct {
+ ULONG Index;
+ ULONG MediaType;
+--- w32api-5.0.2/lib/iphlpapi.def.orig 2017-11-09 02:35:48.000000000 +0100
++++ w32api-5.0.2/lib/iphlpapi.def 2018-09-26 15:56:52.920268737 +0200
+@@ -1,49 +1,264 @@
+ LIBRARY IPHLPAPI.DLL
+ EXPORTS
+ AddIPAddress@20
++AllocateAndGetInterfaceInfoFromStack@20
++AllocateAndGetIpAddrTableFromStack@16
++CPNatfwtCreateProviderInstance@20
++CPNatfwtDeregisterProviderInstance@4
++CPNatfwtDestroyProviderInstance@4
++CPNatfwtIndicateReceivedBuffers@24
++CPNatfwtRegisterProviderInstance@20
++CancelIPChangeNotify@4
++CancelMibChangeNotify2@4
++ConvertGuidToStringA@12
++ConvertGuidToStringW@12
++ConvertInterfaceAliasToLuid@8
++ConvertInterfaceGuidToLuid@8
++ConvertInterfaceIndexToLuid@8
++ConvertInterfaceLuidToAlias@12
++ConvertInterfaceLuidToGuid@8
++ConvertInterfaceLuidToIndex@8
++ConvertInterfaceLuidToNameA@12
++ConvertInterfaceLuidToNameW@12
++ConvertInterfaceNameToLuidA@8
++ConvertInterfaceNameToLuidW@8
++ConvertInterfacePhysicalAddressToLuid@12
++ConvertIpv4MaskToLength@8
++ConvertLengthToIpv4Mask@8
++ConvertRemoteInterfaceAliasToLuid@12
++ConvertRemoteInterfaceGuidToLuid@12
++ConvertRemoteInterfaceIndexToLuid@12
++ConvertRemoteInterfaceLuidToAlias@16
++ConvertRemoteInterfaceLuidToGuid@12
++ConvertRemoteInterfaceLuidToIndex@12
++ConvertStringToGuidA@8
++ConvertStringToGuidW@8
++ConvertStringToInterfacePhysicalAddress@8
++CreateAnycastIpAddressEntry@4
++CreateIpForwardEntry2@4
+ CreateIpForwardEntry@4
++CreateIpNetEntry2@4
+ CreateIpNetEntry@4
++CreatePersistentTcpPortReservation@12
++CreatePersistentUdpPortReservation@12
+ CreateProxyArpEntry@12
++CreateSortedAddressPairs@28
++CreateUnicastIpAddressEntry@4
++DeleteAnycastIpAddressEntry@4
+ DeleteIPAddress@4
++DeleteIpForwardEntry2@4
+ DeleteIpForwardEntry@4
++DeleteIpNetEntry2@4
+ DeleteIpNetEntry@4
++DeletePersistentTcpPortReservation@8
++DeletePersistentUdpPortReservation@8
+ DeleteProxyArpEntry@12
++DeleteUnicastIpAddressEntry@4
++DisableMediaSense@8
+ EnableRouter@8
++FlushIpNetTable2@8
+ FlushIpNetTable@4
+-GetAdaptersAddresses@20
++FlushIpPathTable@4
++FreeMibTable@4
+ GetAdapterIndex@8
++GetAdapterOrderMap@0
++GetAdaptersAddresses@20
+ GetAdaptersInfo@8
++GetAnycastIpAddressEntry@4
++GetAnycastIpAddressTable@8
+ GetBestInterface@8
++GetBestInterfaceEx@8
++GetBestRoute2@28
+ GetBestRoute@12
++GetCurrentThreadCompartmentId@0
+ GetExtendedTcpTable@24
++GetExtendedUdpTable@24
+ GetFriendlyIfIndex@4
+ GetIcmpStatistics@4
++GetIcmpStatisticsEx@8
++GetIfEntry2@4
+ GetIfEntry@4
++GetIfStackTable@4
++GetIfTable2@4
++GetIfTable2Ex@8
+ GetIfTable@12
+ GetInterfaceInfo@8
++GetInvertedIfStackTable@4
+ GetIpAddrTable@12
++GetIpErrorString@12
++GetIpForwardEntry2@4
++GetIpForwardTable2@8
+ GetIpForwardTable@12
++GetIpInterfaceEntry@4
++GetIpInterfaceTable@8
++GetIpNetEntry2@4
++GetIpNetTable2@8
+ GetIpNetTable@12
++GetIpPathEntry@4
++GetIpPathTable@8
+ GetIpStatistics@4
++GetIpStatisticsEx@8
++GetMulticastIpAddressEntry@4
++GetMulticastIpAddressTable@8
++GetNetworkInformation@20
+ GetNetworkParams@8
+ GetNumberOfInterfaces@4
++GetOwnerModuleFromPidAndInfo@20
++GetOwnerModuleFromTcp6Entry@16
++GetOwnerModuleFromTcpEntry@16
++GetOwnerModuleFromUdp6Entry@16
++GetOwnerModuleFromUdpEntry@16
+ GetPerAdapterInfo@12
++GetPerTcp6ConnectionEStats@44
++GetPerTcp6ConnectionStats@32
++GetPerTcpConnectionEStats@44
++GetPerTcpConnectionStats@32
+ GetRTTAndHopCount@16
++GetSessionCompartmentId@4
++GetTcp6Table2@12
++GetTcp6Table@12
+ GetTcpStatistics@4
++GetTcpStatisticsEx@8
++GetTcpTable2@12
+ GetTcpTable@12
++GetTeredoPort@4
++GetUdp6Table@12
+ GetUdpStatistics@4
++GetUdpStatisticsEx@8
+ GetUdpTable@12
+ GetUniDirectionalAdapterInfo@8
++GetUnicastIpAddressEntry@4
++GetUnicastIpAddressTable@8
++Icmp6CreateFile@0
++Icmp6ParseReplies@8
++Icmp6SendEcho2@48
++IcmpCloseHandle@4
++IcmpCreateFile@0
++IcmpParseReplies@8
++IcmpSendEcho2@44
++IcmpSendEcho2Ex@48
++IcmpSendEcho@32
++InitializeIpForwardEntry@4
++InitializeIpInterfaceEntry@4
++InitializeUnicastIpAddressEntry@4
++InternalCleanupPersistentStore@8
++InternalCreateAnycastIpAddressEntry@8
++InternalCreateIpForwardEntry2@8
++InternalCreateIpForwardEntry@4
++InternalCreateIpNetEntry2@8
++InternalCreateIpNetEntry@4
++InternalCreateUnicastIpAddressEntry@8
++InternalDeleteAnycastIpAddressEntry@8
++InternalDeleteIpForwardEntry2@8
++InternalDeleteIpForwardEntry@4
++InternalDeleteIpNetEntry2@8
++InternalDeleteIpNetEntry@4
++InternalDeleteUnicastIpAddressEntry@8
++InternalFindInterfaceByAddress@8
++InternalGetAnycastIpAddressEntry@8
++InternalGetAnycastIpAddressTable@12
++InternalGetForwardIpTable2@12
++InternalGetIfEntry2@8
++InternalGetIfTable2@8
++InternalGetIfTable@12
++InternalGetIpAddrTable@12
++InternalGetIpForwardEntry2@8
++InternalGetIpForwardTable@12
++InternalGetIpInterfaceEntry@8
++InternalGetIpInterfaceTable@12
++InternalGetIpNetEntry2@8
++InternalGetIpNetTable2@12
++InternalGetIpNetTable@12
++InternalGetMulticastIpAddressEntry@8
++InternalGetMulticastIpAddressTable@12
++InternalGetTcp6Table2@12
++InternalGetTcp6TableWithOwnerModule@12
++InternalGetTcp6TableWithOwnerPid@12
++InternalGetTcpTable2@12
++InternalGetTcpTable@12
++InternalGetTcpTableEx@12
++InternalGetTcpTableWithOwnerModule@12
++InternalGetTcpTableWithOwnerPid@12
++InternalGetTunnelPhysicalAdapter@8
++InternalGetUdp6TableWithOwnerModule@12
++InternalGetUdp6TableWithOwnerPid@12
++InternalGetUdpTable@12
++InternalGetUdpTableEx@12
++InternalGetUdpTableWithOwnerModule@12
++InternalGetUdpTableWithOwnerPid@12
++InternalGetUnicastIpAddressEntry@8
++InternalGetUnicastIpAddressTable@12
++InternalSetIfEntry@4
++InternalSetIpForwardEntry2@8
++InternalSetIpForwardEntry@4
++InternalSetIpInterfaceEntry@8
++InternalSetIpNetEntry2@8
++InternalSetIpNetEntry@4
++InternalSetIpStats@4
++InternalSetTcpEntry@4
++InternalSetTeredoPort@4
++InternalSetUnicastIpAddressEntry@8
+ IpReleaseAddress@4
+ IpRenewAddress@4
++LookupPersistentTcpPortReservation@12
++LookupPersistentUdpPortReservation@12
++NTPTimeToNTFileTime@12
++NTTimeToNTPTime@8
++NhGetGuidFromInterfaceName@16
++NhGetInterfaceDescriptionFromGuid@20
++NhGetInterfaceNameFromDeviceGuid@20
++NhGetInterfaceNameFromGuid@20
++NhpAllocateAndGetInterfaceInfoFromStack@20
+ NotifyAddrChange@8
++NotifyIpInterfaceChange@20
++NotifyRouteChange2@20
+ NotifyRouteChange@8
++NotifyStableUnicastIpAddressTable@20
++NotifyTeredoPortChange@16
++NotifyUnicastIpAddressChange@20
++ParseNetworkString@20
++_PfAddFiltersToInterface@24
++_PfAddGlobalFilterToInterface@8
++_PfBindInterfaceToIPAddress@12
++_PfBindInterfaceToIndex@16
++_PfCreateInterface@24
++_PfDeleteInterface@4
++_PfDeleteLog@0
++_PfGetInterfaceStatistics@16
++_PfMakeLog@4
++_PfRebindFilters@8
++_PfRemoveFilterHandles@12
++_PfRemoveFiltersFromInterface@20
++_PfRemoveGlobalFilterFromInterface@8
++_PfSetLogBuffer@28
++_PfTestPacket@20
++_PfUnBindInterface@4
++ResolveIpNetEntry2@8
++ResolveNeighbor@12
++RestoreMediaSense@8
+ SendARP@16
+ SetAdapterIpAddress@20
++SetCurrentThreadCompartmentId@4
+ SetIfEntry@4
++SetIpForwardEntry2@4
+ SetIpForwardEntry@4
++SetIpInterfaceEntry@4
++SetIpNetEntry2@4
+ SetIpNetEntry@4
+ SetIpStatistics@4
++SetIpStatisticsEx@8
+ SetIpTTL@4
++SetNetworkInformation@12
++SetPerTcp6ConnectionEStats@24
++SetPerTcp6ConnectionStats@20
++SetPerTcpConnectionEStats@24
++SetPerTcpConnectionStats@20
++SetSessionCompartmentId@8
+ SetTcpEntry@4
++SetUnicastIpAddressEntry@4
+ UnenableRouter@8
++do_echo_rep@40
++do_echo_req@40
++if_indextoname@8
++if_nametoindex@4
++register_icmp@0