Unified NDIS Protocol and Filter Samples For Windows Windows XP and Windows Server 2003 And Windows Vista/7 and Windows Server 2008 Release Notes Printing Communications Associates, Inc. 4201 Brunswick Court Smyrna, GA 30080 USA TEL: (770) 432-4580 (Primary) FAX: (770) 436-7246 Web: http://www.pcausa.com E-Mail: tdivine@pcausa.com ====================================================================== Product Name : PCAUSA Filters - Extended NDIS 5/6 Sample Component Name : Unified NDIS Protocol and Filters Samples ====================================================================== Version : 4.00.00.24 Build : 0024 Release Date : June 1, 2010 1.) Fixed bad bug in Ndf_IoCsqPurgePendingIrps. 2.) Modified Ndf_DebugPrint so it compiles to nothing in free build. 3.) Moved to WDK 7600.16385.1. 4.) Fixed bugs identified on Vista. The prior WlanExplorer implementation did not properly account for NDIS 5 filters on the NDIS stack above an NDIS 6 Native 802.11 miniport. End result was an "Unexpected error opening adapter" exception being thrown in some cases. ====================================================================== Version : 4.00.00.23 Build : 0023 Release Date : February 25, 2010 1.) Now handle exception that is possible when a read operation is cancelled. 2.) Made ad-hoc fix to a bug that was encountered when running WlanExplorer concurrently with Microsoft Network Monitor. ====================================================================== Version : 4.00.00.22 Build : 0022 Release Date : February 8, 2010 1.) Fixed structure alignment bug in DOT11 statistics. Statistics data now makes sense. 2.) Added some fields to the BSS List tab pages. ====================================================================== Version : 4.00.00.21 Build : 0021 Release Date : February 7, 2010 1.) Now fetch BSS list. List is fetched using both the WLAN API and by making NDIS requests directly to the Native 802.11 miniport. ====================================================================== Version : 4.00.00.20 Build : 0020 Release Date : February 6, 2010 1.) Refine handling of NDIS 6.0 Emulated 802.11 miniports. Improper handling of NDIS 6.0 Emulated 802.11 miniports caused WLAN Explorer to fail on initial startup. This change should help WLAN Explorer run without the startup failure on a wider variety of NDIS 6 802.11 miniports. This is a partial solution to the problem. Still need systematic revision of exception handling. ====================================================================== Version : 4.00.00.19 Build : 0019 Release Date : February 4, 2010 1.) Beginning development of V4.00.00.19. 2.) Restructuring Capture form code. Now capture reads are performed it two steps: buffers read asynchronously are queued and a thread dequeues then and renders them to the text box. 3.) Now supports multiple concurrent reads. ====================================================================== Version : 4.00.00.18 Build : 0017 Release Date : February 3, 2010 1.) Beginning development of V4.00.00.18. 2.) Began implelenting OID_DOT11_STATISTICS. 3.) Tested on Windows 7 x64 Edition on D-Link DWA-552 XtremeN Desktop Adapter (Atheros PCI adapter). Found some quirks in supported PHY list and accomodated them. 4.) There is a problem in that the current software reports that the supporting NDIS protocol or filter driver cannot be found _IF_ some WLAN or NDIS queries fail. To correct this need to systematically review and revise exception handling. In this release the "Cannot find..." message is not shown; instead, a nasty runtime exception message will be shown. 5.) Added support for NDLOG_BLOCK_BUFFER_ATTRIBUTES to set buffer idle timeout. Modified Capture dialog to set buffer idle timeout to 300 milliseconds. A little more responsive now. ====================================================================== Version : 4.00.00.17 Build : 0017 Release Date : February 1, 2010 1.) Beginning development of V4.00.00.17. 2.) NDIS 6 does not support a query on OID_GEN_CURRENT_PCAKET_FILTER in some cases. To accomodate this in a more consistent fashion for diagnostics the NDIS 6 filter driver was modified to special-case a query on OID_GEN_CURRENT_PCAKET_FILTER when made by a NdisEx application. The driver will return packet filter value from the most recent NDIS_STATUS_PACKET_FILTER status indication. 3.) Added support for NDIS 6 OID_GEN_STATISTICS. Note that this will fail when querying on a binding that has media-in-use of Native 802.11. In this case need to query on OID_DOT11_STATISTICS. 4.) Removed Ethernet (802.3) statistics tab page. Useless in practice. 5.) Added IP Helper page implementation. ====================================================================== Version : 4.00.00.16 Build : 0016 Release Date : February 1, 2010 1.) Beginning development of V4.00.00.16. 2.) Fixed bug in WLAN Explorer C# Chooser logic that caused unhandled exception when Native 802.11 binding wasn't found. 3.) Fixed bug in selecting lowest-level binding under some filter layering scenarios. One scenario involved the order of installing Microsoft Network Monitor and installing the NdisEx filter driver. 4.) Modified installer to allow installation on Windows Vista. HOWEVER, absolutely no testing done on Windows Vista. 5.) Added tab pages to Chooser dialog. Several pages are incomplete or only partially implemented. ====================================================================== Version : 4.00.00.15 Build : 0015 Release Date : January 28, 2010 1.) Adding NDIS status logging capability adapted from PCAGizmo... 2.) Expanding Native 802.11 support. Now need Windows SDK v7.0 for current DOT11 definitions. 3.) Enhancing the C# Native 802.11 application support as well. 4.) First out-of-house release of WLAN Explorer. ====================================================================== Version : 4.00.00.14 Build : 0014 Release Date : December 1, 2009 *** Limited External Release *** 1.) Fixed bug in IMFilter UserIoSendComplete routine. Call to DereferenceBinding() was missing. 2.) In Common.h now create all symbolic link names in global namespace. For example: WAS: \\Device\\PcaProtocol CHANGED TO: \\Device\\Global\\PcaProtocol 3.) Note: The stampinf.exe utility from WDK 6001.18002 needs to be copied to the DDK 3790.1830 folder... 4.) Implemented consistent debug print function for all four drivers. See Ndf_DbgPrint and NdfTrace.[ch]. 5.) IRP queuing now done using cancel-safe queue. 6.) Added facility for NDIS 6 protocol and filter driver stack to be enumerated from user-mode. New IOCTL_USERIO_ENUMERATE_FILTER_MODULES calls NdisEnumerateFilterModules. In user mode the filter stack is seen as a USERIO_ENUM_FILTERS structure. 7.) Added most code necessary to disable NDIS 6 task offload to NDIS 6 filter driver. 8.) Now use common memory auditing code in NdfMemory.[ch]. Now applies uniformly to all four drivers. ====================================================================== Version : 4.00.00.13 Build : 0013 Release Date : June 28, 2009 *** LIMITED EXTERNAL TESTING *** 1.) Minor editing of RC and INX files. 2.) Some additions to master ReadMe.htm file. 3.) Added SimpleSendTest to the TestAll application. Tested only on Windows XP PcaProtocol and PcaFilter. At this point the capability to send packets has _NOT_ been added to the Vista PcaFilter... 4.) Tested SimpleSendTest successfully on Vista using NDIS 6 protocol only. Now to add send capability to NDIS 6 LWF. 5.) Added packet send capability to NDIS 6 filter driver. Sends were being tested using the NDIS 6 monitoring LWF. Crashes occur if SimpleSendTest attempts to send on a Native Wi-Fi miniport... During testing noticed that queries for connect status are fairly useless as is. WDK says that the OID_GEN_MEDIA_CONNECT_STATUS(_EX) OIDs are not supported by miniport or filter drivers. So, making them from user-mode to a filter driver then to the lower-levels is not going to be helpful. OTOH, the filter drivers do have knowledge of the connect state through the attach parameters and later status indications. Perhaps the filter drivers should handle these status queries themselves. Some media queries are also fairly useless when passed to NDIS 6 miniports... 6.) Modified NDIS 6 LWF to handle these OIDs locally using internal information maintained from FilterAttach AttachParameters and status indications: OID_GEN_MEDIA_CONNECT_STATUS_EX OID_GEN_MEDIA_CONNECT_STATUS OID_GEN_PHYSICAL_MEDIUM May want to outfit the NDIS 6 protocol driver with this sort of handling as well. 7.) Modified NDIS 6 protocol to handle these OIDs locally using internal information maintained from ProtocolBindAdapterEx BindParameters and status indications: OID_GEN_MEDIA_CONNECT_STATUS_EX OID_GEN_MEDIA_CONNECT_STATUS OID_GEN_PHYSICAL_MEDIUM 8.) Modifications to SimpleSendTest to deal with the fact that the simple send packets induce a crash in the Realtek 8185 Extensible 802.11b/g Wireless Device Native 802.11 miniport when sending on the lowest-altitude binding. If the physical medium is NdisPhysicalMediumNative802_11 and the filter altitude is zero(0), then the simple send test is skipped. The simple send test is also skipped on adapters that are not in the connected state. Send testing exclusively on Windows Vista SP1 x86. 9.) Added UserIoSetInformation, which is basically the same as the method used by NDISPROT. Modifications to protocol drivers was minor. Similar code was added to the filter drivers. Removed NDISPROT artifact that limited the OIDs that could be set. 10.) Modified protocol drivers to remove NDISPROT mechanism where packet filter is automatically set when binding is opened. For these samples the user-mode application must explicitly set the NDIS packet filter using OID_GEN_CURRENT_PACKET_FILTER. 11.) Added RxSimple packet receive test based on NDISPROT DoReadProc. Tested OK on NDIS 6 protocol driver. 12.) Removed MACROs that obscured ordinary kernel/NDIS functionality. e.g. NPROT_INIT_LIST_HEAD and friends, NPROT_INIT_EVENT and friends. In sample drivers overuse of MACROs obscures use of the basic NDIS library functions that are being illustrated. It also bloats the code. Some MACROs are potentially useful, however. But even debug-assist macros obscure teaching the fundamentals. If a MACRO simply generates a debug message when something occurs, then it is hardly worth the effort. Eliminated several DBG-assist MACROs. Two MACROs that were used in NDIS 6 protocol and filter drivers were moved to the Ndf.h header so they can be used by all NDIS drivers: NDF_ACQUIRE_SPIN_LOCK NDF_RELEASE_SPIN_LOCK NDF_SLEEP_AT_PASSIVE_LEVEL 13.) Implemented Read IRP queuing, cancel and cleanup routines for NDIS 5 and 6 filters. Support added for flushing pending read IRP queue on NDIS 6 FilterDetach. Tested on Vista. Support for flushing pending read IRP queue on NDIS 5 unbind not yet there. 14.) Reworked Ndf_GetMetaDataFromPacket and Ndf_GetMetaDataFromNetBuffer. These two now call a common routine Ndf_GetMetaDataFromMdlChain which does the work for NDIS 5 and NDIS 6 parsing. Added calls to Ndf_GetMetaDataFromPacket and Ndf_GetMetaDataFromNetBuffer to protocol drivers. NDIS 5 and 6 protocols and filters now use a common "packet" parsing mechanism. Example filtering code is trivial at present. Simply accept all IPv4 packets. Limited testing of Ndf_GetMetaDataFromMdlChain using NDIS 5 and 6 filters only. 15.) Removed NDISPROT-style packet read mechanism. Replacing it with a multi-packet read mechanism where each read passes a large buffer that can be filled with multiple packets. Packet data is returned using structures that are loosely based on the Pcap Next Generation dump format. ====================================================================== Version : 4.00.00.12 Build : 0012 Release Date : April 26, 2008 *** LIMITED EXTERNAL TESTING ***