Skip to content

Commit 25a1777

Browse files
authored
Merge pull request #18 from wiresock/develop
Version 3.4.3: Introduced new API functions. Enhanced inline documentation.
2 parents a382a2f + 1f8aed0 commit 25a1777

5 files changed

Lines changed: 1974 additions & 753 deletions

File tree

include/Common.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
#include <WinIoctl.h> // Compiling Win32 Applications Or DLL's
2121
#endif // _WINDOWS
2222

23-
#define NDISRD_VERSION 0x04003000
23+
#define NDISRD_VERSION 0x04033000
2424
#define NDISRD_MAJOR_VERSION 0x0003
25-
#define NDISRD_MINOR_VERSION 0x0400
25+
#define NDISRD_MINOR_VERSION 0x0403
2626

2727
// Common strings set
2828
#define DRIVER_NAME_A "NDISRD"
@@ -662,6 +662,9 @@ typedef struct _UNSORTED_READ_SEND_REQUEST
662662
#define IOCTL_NDISRD_ADD_SECOND_FAST_IO_SECTION\
663663
CTL_CODE(FILE_DEVICE_NDISRD, NDISRD_IOCTL_INDEX+28, METHOD_BUFFERED, FILE_ANY_ACCESS)
664664

665+
#define IOCTL_NDISRD_QUERY_IB_POOL_SIZE\
666+
CTL_CODE(FILE_DEVICE_NDISRD, NDISRD_IOCTL_INDEX+29, METHOD_BUFFERED, FILE_ANY_ACCESS)
667+
665668
#endif // __COMMON_H__
666669

667670

include/ndisapi.h

Lines changed: 91 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*************************************************************************/
2-
/* Copyright (c) 2000-2023 NT Kernel Resources. */
2+
/* Copyright (c) 2000-2023 NT KERNEL. */
33
/* All Rights Reserved. */
44
/* http://www.ntkernel.com */
55
/* ndisrd@ntkernel.com */
@@ -12,6 +12,7 @@
1212
/* User mode */
1313
/* */
1414
/*************************************************************************/
15+
#pragma once
1516

1617
#ifdef _LIB // must be defined when linking static library version of ndisapi.dll
1718
#define NDISAPI_API
@@ -20,7 +21,7 @@
2021
// from a DLL simpler. All files within this DLL are compiled with the NDISAPI_EXPORTS
2122
// symbol defined on the command line. this symbol should not be defined on any project
2223
// that uses this DLL. This way any other project whose source files include this file see
23-
// NDISAPI_API functions as being imported from a DLL, wheras this DLL sees symbols
24+
// NDISAPI_API functions as being imported from a DLL, whereas this DLL sees symbols
2425
// defined with this macro as being exported.
2526
#ifdef NDISAPI_EXPORTS
2627
#define NDISAPI_API __declspec(dllexport)
@@ -50,38 +51,110 @@ enum
5051

5152
typedef BOOL (__stdcall *IsWow64ProcessPtr)(HANDLE hProcess, PBOOL Wow64Process);
5253

53-
// Simple OSVERSIONINFO extension
54+
/**
55+
* @struct CVersionInfo
56+
* @brief An extension of the OSVERSIONINFO structure for retrieving and
57+
* comparing operating system version information.
58+
*
59+
* This structure provides a set of functions to check whether the current
60+
* operating system version is equal to or greater than a specific version,
61+
* such as Windows XP, Windows 7, or Windows 10.
62+
*
63+
* Usage:
64+
* CVersionInfo versionInfo;
65+
* if (versionInfo.IsWindows7OrGreater()) {
66+
* // Code for Windows 7 or later
67+
* }
68+
*/
5469
struct NDISAPI_API CVersionInfo : private OSVERSIONINFO
5570
{
5671
#ifdef _USE_LEGACY_VERSION_INFO
57-
CVersionInfo() {
72+
/**
73+
* @brief Constructor that initializes the OSVERSIONINFO structure.
74+
*/
75+
CVersionInfo()
76+
{
5877
dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
5978
::GetVersionEx(this);
6079
}
6180

81+
/**
82+
* @brief Checks if the operating system is Windows Vista or greater.
83+
* @return TRUE if Windows Vista or greater, FALSE otherwise.
84+
*/
6285
BOOL IsWindowsVistaOrGreater() { return (dwMajorVersion >= 6); }
86+
87+
/**
88+
* @brief Checks if the operating system is Windows 7 or greater.
89+
* @return TRUE if Windows 7 or greater, FALSE otherwise.
90+
*/
6391
BOOL IsWindows7OrGreater() { return (dwMajorVersion > 6) || ((dwMajorVersion == 6) && (dwMinorVersion > 0)); }
64-
BOOL IsWindowsXPOrGreater() { return ((dwMajorVersion == 5) && (dwMinorVersion >= 1))/*Windows XP/2003*/ || (dwMajorVersion > 5)/*Windows Vista or later*/; }
92+
93+
/**
94+
* @brief Checks if the operating system is Windows XP or greater.
95+
* @return TRUE if Windows XP or greater, FALSE otherwise.
96+
*/
97+
BOOL IsWindowsXPOrGreater() { return ((dwMajorVersion == 5) && (dwMinorVersion >= 1)) || (dwMajorVersion > 5); }
98+
99+
/**
100+
* @brief Checks if the operating system is Windows 10 or greater.
101+
* @return TRUE if Windows 10 or greater, FALSE otherwise.
102+
*/
65103
BOOL IsWindows10OrGreater() { return (dwMajorVersion >= 10); }
104+
105+
/**
106+
* @brief Checks if the operating system is of the Windows NT platform.
107+
* @return TRUE if Windows NT platform, FALSE otherwise.
108+
*/
66109
BOOL IsWindowsNTPlatform() { return (dwPlatformId == VER_PLATFORM_WIN32_NT); }
67110
#else
68-
BOOL IsWindowsVistaOrGreater() { return ::IsWindowsVistaOrGreater(); }
69-
BOOL IsWindowsXPOrGreater() { return ::IsWindowsXPOrGreater(); }
70-
BOOL IsWindows7OrGreater() { return ::IsWindows7OrGreater(); }
71-
BOOL IsWindows10OrGreater() { return ::IsWindowsVersionOrGreater(10, 0, 0); }
72-
BOOL IsWindowsNTPlatform() { return IsWindowsXPOrGreater(); }
111+
/**
112+
* @brief Static function to check if the operating system is Windows Vista or greater.
113+
* @return TRUE if Windows Vista or greater, FALSE otherwise.
114+
*/
115+
static BOOL IsWindowsVistaOrGreater() { return ::IsWindowsVistaOrGreater(); }
116+
117+
/**
118+
* @brief Static function to check if the operating system is Windows XP or greater.
119+
* @return TRUE if Windows XP or greater, FALSE otherwise.
120+
*/
121+
static BOOL IsWindowsXPOrGreater() { return ::IsWindowsXPOrGreater(); }
122+
123+
/**
124+
* @brief Static function to check if the operating system is Windows 7 or greater.
125+
* @return TRUE if Windows 7 or greater, FALSE otherwise.
126+
*/
127+
static BOOL IsWindows7OrGreater() { return ::IsWindows7OrGreater(); }
128+
129+
/**
130+
* @brief Static function to check if the operating system is Windows 10 or greater.
131+
* @return TRUE if Windows 10 or greater, FALSE otherwise.
132+
*/
133+
static BOOL IsWindows10OrGreater() { return ::IsWindowsVersionOrGreater(10, 0, 0); }
134+
135+
/**
136+
* @brief Static function to check if the operating system is of the Windows NT platform.
137+
* @return TRUE if Windows NT platform, FALSE otherwise.
138+
*/
139+
static BOOL IsWindowsNTPlatform() { return IsWindowsXPOrGreater(); }
73140
#endif // _MSC_VER >= 1700
74141
};
75142

76143
class NDISAPI_API CNdisApi
77144
{
78-
79145
class CWow64Helper;
80146

81147
public:
82148
CNdisApi (const TCHAR* pszFileName = _T(DRIVER_NAME_A));
83149
virtual ~CNdisApi ();
84150

151+
#if _MSC_VER >= 1800 && !defined(_USING_V110_SDK71_)
152+
CNdisApi(const CNdisApi& other) = delete;
153+
CNdisApi(CNdisApi&& other) = delete;
154+
CNdisApi& operator=(const CNdisApi& other) = delete;
155+
CNdisApi& operator=(CNdisApi&& other) = delete;
156+
#endif // _MSC_VER >= 1800 && !defined(_USING_V110_SDK71_)
157+
85158
private:
86159
// Private member functions
87160
BOOL DeviceIoControl (DWORD dwService, void *BuffIn, int SizeIn, void *BuffOut, int SizeOut, unsigned long *SizeRet = NULL, LPOVERLAPPED povlp = NULL) const;
@@ -122,6 +195,7 @@ class NDISAPI_API CNdisApi
122195
BOOL ReadPacketsUnsorted(PINTERMEDIATE_BUFFER* Packets, DWORD dwPacketsNum, PDWORD pdwPacketsSuccess) const;
123196
BOOL SendPacketsToAdaptersUnsorted(PINTERMEDIATE_BUFFER* Packets, DWORD dwPacketsNum, PDWORD pdwPacketSuccess) const;
124197
BOOL SendPacketsToMstcpUnsorted(PINTERMEDIATE_BUFFER* Packets, DWORD dwPacketsNum, PDWORD pdwPacketSuccess) const;
198+
BOOL GetIntermediateBufferPoolSize(PDWORD pdwSize) const;
125199
DWORD GetBytesReturned () const;
126200

127201
// Static helper routines
@@ -132,6 +206,9 @@ class NDISAPI_API CNdisApi
132206
static BOOL SetAdaptersStartupMode ( DWORD dwStartupMode );
133207
static DWORD GetAdaptersStartupMode ();
134208

209+
static BOOL SetPoolSize(DWORD dwPoolSize);
210+
static DWORD GetPoolSize();
211+
135212
static BOOL IsNdiswanIp ( LPCSTR adapterName );
136213
static BOOL IsNdiswanIpv6 ( LPCSTR adapterName );
137214
static BOOL IsNdiswanBh ( LPCSTR adapterName );
@@ -235,12 +312,15 @@ extern "C"
235312
DWORD __stdcall GetMTUDecrement();
236313
BOOL __stdcall SetAdaptersStartupMode(DWORD dwStartupMode);
237314
DWORD __stdcall GetAdaptersStartupMode();
315+
BOOL __stdcall SetPoolSize(DWORD dwPoolSize);
316+
DWORD __stdcall GetPoolSize();
238317
BOOL __stdcall IsDriverLoaded(HANDLE hOpen);
239318
BOOL __stdcall InitializeFastIo(HANDLE hOpen, PFAST_IO_SECTION pFastIo, DWORD dwSize);
240319
BOOL __stdcall AddSecondaryFastIo(HANDLE hOpen, PFAST_IO_SECTION pFastIo, DWORD dwSize);
241320
BOOL __stdcall ReadPacketsUnsorted(HANDLE hOpen, PINTERMEDIATE_BUFFER* Packets, DWORD dwPacketsNum, PDWORD pdwPacketsSuccess);
242321
BOOL __stdcall SendPacketsToAdaptersUnsorted(HANDLE hOpen, PINTERMEDIATE_BUFFER* Packets, DWORD dwPacketsNum, PDWORD pdwPacketSuccess);
243322
BOOL __stdcall SendPacketsToMstcpUnsorted(HANDLE hOpen, PINTERMEDIATE_BUFFER* Packets, DWORD dwPacketsNum, PDWORD pdwPacketSuccess);
323+
BOOL __stdcall GetIntermediateBufferPoolSize(HANDLE hOpen, PDWORD pdwSize);
244324
DWORD __stdcall GetBytesReturned(HANDLE hOpen);
245325

246326
BOOL __stdcall IsNdiswanIp ( LPCSTR adapterName );

ndisapi.dll/ndisapi.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,15 @@ SetMTUDecrement
3030
GetMTUDecrement
3131
SetAdaptersStartupMode
3232
GetAdaptersStartupMode
33+
SetPoolSize
34+
GetPoolSize
3335
IsDriverLoaded
3436
InitializeFastIo
3537
AddSecondaryFastIo
3638
ReadPacketsUnsorted
3739
SendPacketsToAdaptersUnsorted
3840
SendPacketsToMstcpUnsorted
41+
GetIntermediateBufferPoolSize
3942
GetBytesReturned
4043
IsNdiswanIp
4144
IsNdiswanIpv6

0 commit comments

Comments
 (0)