PCAUSA NDIS Filter Driver Samples For Windows XP through Windows 7 Release Notes Printing Communications Associates, Inc. 4201 Brunswick Court Smyrna, GA 30080 USA TEL: (770) 432-4580 (Primary) FAX: (770) 436-7246 E-Mail: tdivine@pcausa.com ====================================================================== Component Part No.: SKU 230-232 Component Name : PCAUSA NDIS 5/6 Filter Driver Samples ====================================================================== Component Version : 4.00.07.04.0 Release Date : February 9, 2010 1.) Now free g_AdapterListLock in NDIS 5 driver PCASIMUnloadDriver callback. 2.) In NDIS 5 driver CLUnbindAdapterHandler routine now set correct flag. 3.) In NDIS 5 and NDIS 6 drivers the check for possible unbind or detach operation was not made before queuing read IRPs. 4.) Eliminated a few PREfast warnings from WDK 7600.16385.0. See the Drivers-0704.diff file for the details of this change. ====================================================================== Component Version : 4.00.07.03.0 Release Date : January 18, 2010 1.) Added CopyInf directive to Windows XP netim.inf file. This fixes a bug where the NDIS 5 driver could be installed sucessfully using the FltInstall utility, but the install failed using the Network Control Panel to install the service. 2.) Changed where pFilter->FilterHandle is initialized in FilterAttach. 3.) Updated to build drivers using Windows 7 WDK (7600.16385.0). 4.) Updated Copyright years to 2010. ====================================================================== Component Version : 4.00.07.02.0 Release Date : November 17, 2009 1.) In NDIS 6 driver now disable task offload only for NdisMedium802_3. 2.) Fixed bug in the console adapter chooser key press checking that caused applications to exit prematurely if there were multiple adapters to choose from. 3.) Reinstated support for operating on WAN adapters. *** NOTE: The current IPRedir filtering only supports IPv4. Operating on IPv6 requires enhancement to the redirection filter logic. ====================================================================== Component Version : 4.00.07.01.0 Release Date : November 15, 2009 1.) Now built under WDK 6001.18002 and Visual Studio 2008. 2.) Module and binary names changed. 3.) Adapted NDIS 5 driver to use most recent PCAUSA "Network Driver Framework" (NDF). 3.) Added NDIS 6 Lightweight Filter (LWF) driver with functionality matching that of the NDIS 5 IM driver. Common user-mode applications can be used 4.) Modified NDIS 5 IM filter to use cancel-safe queue for read IRP queuing. 5.) PCAUSA sample drivers signed. 6.) PCAUSA sample binaries properties marked: "Evaluation Only. Commercial distribution prohibited!" ====================================================================== Component Part No.: NDISIM/NT4/NT5/NT5.1-030 Component Name : PCAUSA Sample NDIS Intermediate Driver (PCASIM) ====================================================================== Component Version : 3.05.06.17.3 Release Date : DECEMBER 1, 2007 1.) Added DIRs files and top level MakeXYZ batch files that systematically build most driver versions - including x64 versions. Windows 2000 builds use Windows Server 2003 SP1 DDK (Build 3790.1830). Windows XP and higher builds use the Windows Vista WDK (Build 6000). Driver executables are found in their objxyz_xyz_xyz folders. ====================================================================== Component Version : 3.05.06.17.2 Release Date : MAY 2, 2007 *** Alpha 2 Release *** *** Limited External Distribution *** 1.) Fixed problem with protocol characteristics that caused new build approach to generate faulty driver when driver build under the Windows 2000 build environment. ====================================================================== Component Version : 3.05.06.17.1 Release Date : MAY 1, 2007 *** Alpha 1 Release *** *** Limited External Distribution *** 1.) Updated W32NDIS.h to include 802.11 OID definitions and associated structures for new WiFi Protected Access (WPA). 2.) Revised CLRequestComplete handling of OID_GEN_MAC_OPTIONS. Now only remove the no-loopback bit for Windows XP or greater. Do not remove the no-loopback bit on Windows 2000. 3.) Fixed bug in Packet Redirector driver IMFilter_WriteOnAdapter routine. Call to NdisMEthIndicateReceive passed incorrect value for PacketSize. This sometimes resulted in page fault when higher-level protocol called NdisTransferData to fetch non-existant residual bytes. 4.) Fixed bug that caused RASPPPoE to fail on Windows 2000 when PCASIM-based NDIS IM drivers were installed. Problem was that BytesRead and BytesNeed were not returned properly before calling NdisMSetInformationComplete in CLRequestComplete function of the NdisReq.c module. 5.) Fixed driver hibernation BSOD encountered using NDIS Tester. This fix is in the NDISREQ.c module, in the MPQueryInformation and the MPSetInformation routines. In both routines move the call to CLRefAdapter from its original location to a new location just prior to building the proxy request. Here are the first few lines of the call in its correct location in MPQueryInformation (MPSetInformation is similar): // // Setup The NDIS Request // CLRefAdapter( pAdapt ); pAdapt->MPRequest.RequestType = NdisRequestQueryInformation; 6.) Modified drivers to use case-insensitive compare when opening lower or virtual adapter. This is done by upcaseing all strings and then using NdisEqualString. This was important when opening NDISWANIP. Some systems specify this as \Device\NDISWANIP. Others use \DEVICE\NDISWANIP. Fixed these PCASIM variations: PktRedir CryptoPing DemoForDownload IPMonitor PassThru 7.) Modifications to allow building x64 (AMD64) driver versions. The required modifications were fairly simple. Basically the types related to the ADAPTER structure m_nOpenRefnum field were changed from ULONG to ULONG_PTR. The SIM_REQUEST structure defined in PCAIMCOM.h previously passed a PVOID in the InformationBuffer fields. If a 32-bit application uses this field, then it will break when passed to a 64-bit driver. This was accomodated by adding the SIM_REQUEST_32 structure definition and then adding three additional handlers to the 64-bit version of the driver: PCASIM_MakeNdisRequest_32 PCASIM_QueryPrivateInformation_32 PCASIM_SetPrivateInformation_32 This approach allows the 64-bit driver to seamlessly support both 32-bit and 64-bit applications. Finally, the .INF files must be modified to identify NTamd64 entries. This change breaks building these drivers under the NT 4.0 DDK. Probably can define a ULONG_PTR type for building 32-bit drivers for NT 4.0 if it becomes necessary. Modified these driver components: NDHelper PktRedir IPMonitor PassThru CryptoPing 8.) Fixed bugs in Close/Cleanup routines. PktRedir PktRedirEx IPMonitor In IMFilter_CancelPacketReadEx changed the location of the call to IoReleaseCancelSpinLock to avoid possibility of releasing other spinlocks in this routine when not at DISPATCH_LEVEL. 9.) In Packet Redirector (PktRedir) driver added m_PktRedirFilterListLock spin lock to synchronize access to the packet redirector filter list. Goal is to insure that the filter list is not used by the packet filter routines unless the list is completely updated. 10.) Both IPMonitor and PktRedir could consume excessive resources under some conditions. In particular, the size of the send and receive packet pool was too large in calls to NdisAllocatePacketPool. Made these changes: WAS: #define MAX_PACKET_POOL_SIZE 0x0000FFFF #define MIN_PACKET_POOL_SIZE 0x000000FF CHANGED TO: #define MAX_PACKET_POOL_SIZE 512 #define MIN_PACKET_POOL_SIZE 32 11.) The sample applications did not accomodate Jumbo frames. They simply used fixed-size PacketData arrays allocated on the stack. Modified the PktRedir TcpRedir application and the IPMonitor IPMon applications to query OID_GEN_MAXIMUM_TOTAL_SIZE and then allocate a suitably-sized buffer from the heap. To simplify the OID_GEN_MAXIMUM_TOTAL_SIZE query a new function was added to the PcaImApi DLL: PCASIM_NdisQueryInformation This new function is a wrapper around the existing PCASIM_MakeNdisRequest function. It provides a simpler application interface by hiding the the details of the SIM_REQUEST structure used internally. 12.) Modified several aspects of implementation to more closely parallel implementation in DDK 3790.1830 PassThru driver. Driver passed NDIS Test from HCT 12.1 without these changes; however, it is better to follow Microsoft's examples in these areas. 12.1) Added these fields to the ADAPT structure: BOOLEAN UnbindingInProcess; NDIS_STATUS LastIndicatedStatus; // The last indicated media status NDIS_STATUS LatestUnIndicateStatus; // The latest suppressed media status 12.2) Renamed this handler in ndisreq.c: WAS: HandleMPSetInfoForPNPSetPower CHANGED TO: MPProcessSetPowerOid 12.3) In added code to initialize and use LastIndicatedStatus and LatestUnIndicateStatus. 12.4) Added code to initialize and use UnbindingInProcess. 12.5) Added code in MPQueryInformation to block query for OID_GEN_SUPPORTED_GUIDS. 13.) Modified Packet Redirector (PktRedir) to have a new filter mechanism that operates on an IP address and netmask for source and for destination IP. Also includes an IP protocol-selecting bitmask that can select TCP and/or UDP for monitoring or blocking. See the PKT_REDIR_FILTER_ENTRY_EX structure defined in PcaImCom.h and the new TcpRedirEx sample application. 14.) The residual buffer pool was not freed. Added code to free ResidualBufferPoolHandle in CLFreeContextPool. 15.) Removed Reset handler since it is not actually needed in NDIS IM drivers and can cause random problems. 16.) Previous release used the Windows 2000 DDK. Modified the build setup for this release substantially. The following build environments can be used to build the NDIS 5 IM filter driver samples: Windows 2000 x86 Use the Windows 2000 build environment of the Windows Server 2003 SP1 DDK (Build 3790.1830). Note 1. Windows XP and Windows Server 2003 x86 Use the Windows XP build environment of the Windows Vista WDK (Build 6000). Windows XP and Windows Server 2003 x64 Use the Windows Server 2003 AMD64 build environment of the Windows Vista WDK (Build 6000). Note 1.) Windows Vista WDK 6000 does not support building these samples for the Windows 2000 target platform. NDHelper (An export library. Must be built before other drivers.) PktRedir CryptoPing IPMonitor PassThru PktRedirEx T-Bridge DemoForDownload 17.) Added FltInstall application that uses the NetCfg API to install the filter driver without opening the Network Contol Panel. 18.) Modified W32NDIS.h. Now use definitions and declarations from NTDDNDIS.h more extensively. Now need to have Microsoft® Windows® Software Development Kit (SDK) installed to build some applications. 19.) Removed preprocessor definitions related to NDIS 4 and Windows NT 4.0. ====================================================================== Component Version : 3.05.06.16.1 Release Date : July 15, 2003 1.) Omission of essential update to some sample drivers. Make sure that the call to W32N_RefOpenContext is present in W32N_AllocOpenContext, DEVMJFCN.C: ... // // Add Initial Reference To Open Context // W32N_RefOpenContext( pW32NOpenContext ); return( pW32NOpenContext ); } ====================================================================== Component Version : 3.05.06.16 Release Date : June 15, 2003 1.) New source code directory layout 1.1) WAS: \PCADev\NDISIM\... IS : \PCADev\NDISIM\nnnn\... Where nnnn is the "Build Number", constructed from the last two bytes of the Version Number. For example, the Build Number for V3.05.06.16 is 616. 1.2) Reorganized applications and drivers into common folder. For example, TDIEcho application and driver are now inder one folder: Application: \PCADev\NDISIM\513\PktRedir\App Driver: \PCADev\NDISIM\513\PktRedir\Driver 2.) Fixed Bug Check 0xC9 in PCASIM_DeviceClose. Call to NdisReleaseSpinLock was conditional; should be unconditional. 3.) In UTIL_htonl and UTIL_htons functions now use RtlUlongByteSwap and RtlUshortByteSwap system functions instead of private code. 4.) Added PCASIM_GetAdapterVendorDescription() function to PCAImApi DLL. Supports ANSI and UNICODE character sets. 5.) Revised Packet Redirector sample applications. 5.1) Some applications now have simple console-based adapter chooser instead of using hard-coded MAC addreses. 5.2) More extensive use of opening adapter by name (PCASIM_OpenXYZAdapter) instead of by Link Address (PCASIM_OpenXYZAdapterByLinkAddress). 5.3) User-Mode Rx Loop Test (UMRxLoop) replaces previous PRTest5. 6.) Created new Network Driver Helper (NDH) export library. NDHelper.lib encapsulates some functions of broad interest in the development of any type of network driver that is not limited to exclusive use of NDIS library. Example functions moved to NDHelper library include: NDH_htonl NDH_ntohl NDH_htons NDH_ntohs NDH_in_cksum NDH_ChecksumPacket NDH_ReadOnPacket 7.) Updated PnP code (PnP.c) for NDIS 5.1. Note that the differences in PnP are sufficient to REQUIRE a separate driver for NDIS 5.0 (Windows 2000) and NDIS 5.1 (Windows XP and higher). Also note that the PCAUSA samples do not use packet stacking. Because of this there are some differences between the PCAUSA and Microsoft PnP handlers. 8.) Changed design to use separate packet pool for send and receives. The prior single-pool design has been satisfactory if appropriate packet re-initialization is done. However, best to follow Microsoft guidelines. As part of this modification use of SList to cache packets for re-use was removed. 9.) Updated W32NDIS.h to include 802.11 OID definitions and associated structures. 10.) Fixed or identified problems using NDIS Tester V4.03.0030 from HCT Test Kit 11.2: 10.1) PerformanceBlast test stopped abnormally because a number of send packets were not returned within required 10.5 second interval. The cause of this problem was that the driver did not handle resource allocation failure (context allocation in UTIL_RepackagePacketForSend) in the send path. An interium fix was made in IMFilter_HandlePacketToSend so send packets are silently dropped when required resources are not available. This is NOT a complete fix. A more complete fix would include: 1.) Growing the driver's context pool when necessary (it is currently fixed size). 2.) Queuing packets passed to MPSendPackets if resources are not available. 11.) Made improvements in driver for handling OID_PCASIM_ENUMERATE_BINDINGS. Although no problems have been reported with this facility, code examination in parallel with other work showed that there was a possibility that the list-termination NULL would not be present in some situations. This, of course, would cause a fault in the user mode application. See the OID_PCASIM_ENUMERATE_BINDINGS case in the PCASIM_QueryPrivateInformation routine in the devmjfcs.c module. 12.) Made some tests with both PCASIM and the Microsoft PassThru sample concurrently installed on Windows XP SP1. No problem observed in quick test using primarily ping. May run NDIS Tester on this configuration later. 13.) Very minor changes to .INF files. Checked with Chkinf. There are errors. HOWEVER, the errors reported do not make much sense AND the same errors are reported for the PassThru .INFs. 14.) Fixed memory leak in _PCASIM_OpenAdapter routine in PCAImApi DLL. Temporary structure used to pass adapter name to driver was never freed. Leak would be observed if adapter _PCASIM_OpenAdapter was called frequently. (This routine does the work for PCASIM_OpenVirtualAdapter and PCASIM_OpenLowerAdapter...) 15.) Made modifications to driver UTIL_FindAdapterByVirtualAdapterName and UTIL_FindAdapterByAdapterName routines in util.c. 15.1) Now hold AdapterListLock while searching adapter list. 15.2) Now use length check and NdisEqualMemory for name comparison. This match is now case-sensitive, but it can be safely performed at IRQL == DISPATCH_LEVEL. Previously NdisEqualString was used... 16.) Fixed bug in sanity check in CLRequestComplete function in driver ndisreq.c module. Sanity check is intended to handle some observed cases where a miniport query may return a value of BytesWritten that is larger then the actual InformationBufferLength. The bug was that the check was inadvertantly performed on both both queries and on set information requests. Revised check now operates only on NdisRequestQueryInformation. 17.) Added reference counting to driver's ADAPTER and W32N_OPEN_CONTEXT memory. Calls to NdisRequest now ref/deref these counters. 18.) Replaced some calls to NdisAllocateMemory with NdisAllocateMemoryWithTag. 19.) Fixed logic bug in driver MPSendPackets routine in send.c. The packet list processing code SendAction == SEND_FILTER_ACTION_DROP_PACKET was faulty. When this SendAction was returned the rest of the packets in the list were not processes. Fix was to replace a return call with continue. ====================================================================== Component Version : 2.04.05.15 Release Date : March 22, 2002 1.) Reworked LOOPBACK locic. The logic faults prevented UDP broadcasts to the local host from being porperly looped back and also could present confusing LOOPBACK data to higher level protocols (such as a network monitor). 1.1) PassThru Sample A.) NDIS_MAC_OPTION_NO_LOOPBACK is removed from the NDIS IM driver's miniport MacOptions. This prevents NDIS from doing software loopback of packets passed to the NDIS IM driver's send handlers. B.) Do _NOT_ set NDIS_FLAGS_DONT_LOOPBACK in packets that we send on the lower miniport. The net effect is that of PassThru the LOOPBACK is performed only once by the lower miniport driver. This is _NOT_ appropriate for all NDIS IM's, however. ====================================================================== Component Version : 2.04.05.15 Release Date : March 22, 2002 *** FOR LIMITED EXTERNAL TESTING *** 1.) Certain adapter/miniport/Windows version combinations have been reported to have problems with the NDIS IM sample drivers. The one reported most often is: SMC EtherEZ 8416 (Realtek-based, ISA, Combo card) Windows 2000 SP1 Driver V3.12.0.0 dated 10/19/1999 (From Windows 2000 CD) The most serious problem observed with this specific adapter/miniport/version combination is that it does not correctly set the BytesWritten field in the NDIS_REQUEST structure when queries are completed. In some cases the BytesWritten field may be larger then the InformationBufferSize. If this case, if BytesWritten is used without sanity checking then a page fault can occur when accessing the information buffer. 1.1) Added sanity checks to CLRequestComplete() in NDISREQ.C to force BytesWritten to be less than or equal InformationBufferSize before passing the query information on for further processing. This eliminated some page faults when making queries for strings - like OID_GEN_VENDOR_DESCRIPTION. Also added similar sanity check in PCAImApi DLL. The PCASIM_DoMakeRequest() routine in REQUEST.C was modified. 1.2) Change 1.1) eliminated most page faults when operating with this adapter. However, the NDIS IM was still not cimpletely functional. One problem was that when querying for OID_GEN_CURRENT_ADDRESS the BytesWritten field was still not correct. For example, the BytesWritten value was reported to be eight(8) when it should have been six(6). This prevented the PCASIM_OpenXXXAdapterByLinkAddress() routines from finding a match on the Ethernet address because the PCASIM_GetAdapterCurrentAddress() fetched a bogus 8-byte address that was later compared to a 6-byte address with no joy. Modified PCASIM_GetAdapterCurrentAddress() to ignore BytesWritten - at least for Ethernet. Now ImUtil and LANRxMon work OK with this flakey adapter/driver/version combination. 2.) Another fix for Reaktek/SMC receive bug. Modified CLReceiveIndication() to test lower adapter NDIS_MAC_OPTION_TRANSFERS_NOT_PEND bit. If bit set, ignore LookAheadBufferSize and assume full packet is actually present. Use PacketSize instead of LookAheadBufferSize, and do _NOT_ call NdisTransferData. NOTE: This fix has been reported to help some users, but may not actually be valid. This will be tested further *** 3.) At least one NDIS protocol (Nortel VPN Client V4.10) has been observed to call ProtocolBindAdapter with a NULL pointer for return Status. Added self-protection in the drivers CLBindAdapterHandler() in the adapter.c module. 4.) Code in CLRequestComplete() which monitored and modified some OIDs did not account for the possibility of of being given a NULL pointer for InformationBuffer for some OIDs that ALWAYS have predefined length of ULONG. These included: OID_GEN_MAXIMUM_SEND_PACKETS OID_GEN_MAC_OPTIONS Customer feedback reports that WHQL NDIS Tester does this. Added code to properly handle this possibility. ====================================================================== Component Version : 2.04.05.14 "a" Release Date : Never formally released... 1.) Made changes to DevMjFcn.c to support IOCTL_NDIS_QUERY_GLOBAL_STATISTICS on Windows NT 4.0 only. Now call original NDIS major function table for CREATE, DEVICE_CONTROL, CLEANUP and CLOSE if DeviceObject is not PCASIMWDM device object. This allows applications like MACADDR to operate correctly. Windows NT 4.0 only... 2.) Implemented Sanity Check On Packet Length in three routines within UTIL.C: UTIL_RepackagePacketForSend UTIL_MakePacketFromReceiveIndication UTIL_CloneReceivePacket These routines now check PacketLength early on and fail the operation if the packet is too large to be accomodated. These sanity checks handlers replace the ASSERT calls that identified the existance of the potential problem in previous versions. 3.) Revised Win32 Packet Redirector sample applications. Added WAN packet redirection sample applications. 4.) Modified CLRequestComplete handler in NDISREQ.C to filter the OID_GEN_MAXIMUM_SEND_PACKETS query. If the lower adapter fails the query we modify the query result to indicate that we support one(1) send packet. This filter was included in the original PCASIM Windows NT NDIS IM sample, but was omitted from the new sample. It appears that filtering the OID_GEN_MAXIMUM_SEND_PACKETS query this way is required when running on Windows NT 4.0 Server (but NOT Workstation...). 5.) Fixed bug in logic for waiting for NDIS requests. Basically, the adapter IMRequestEvent was not being reset after each wait. Fix is to add NdisResetEvent call at the beginning of IMQueryInformation and IMSetInformation calls. This problem first showed up on Windows XP RC 1, where it caused a BSOD when the driver is installed or loaded. 6.) The PacketPoolUseCount field in the ADAPTER structure was never initialized. Now initialize it in CLAllocateAdapter. 7.) Fixed minor bug in handling of OID_GEN_VENDOR_DESCRIPTION in CLRequestComplete handler (NDISREQ.C) for NDIS IM drivers. ====================================================================== Component Version : 2.04.05.14 Release Date : June 7, 2001 1.) Now fail OID_TCP_TASK_OFFLOAD query by returning NDIS_STATUS_NOT_SUPPORTED. This is in accordance with PCAUSA KB05280101 and the advice of Microsoft. This fixed several mysterious problems that occur on adapters that provide NDIS task offload capability. See PCAUSA KB Article KB05280101 for more information. Prior to incorporating NDIS task offload, made several task offload enhancements. These were, in fact, sufficient to allow the PassThru driver to operate over an adapter that provided TCP/IP transmit checksum offload. They are irrevalent since task offload is now disabled, but here they are: 1.1.) Change to fix problem with incorrect checksums being generated on packets being sent on adapters that support TCP/IP checksum offload. In UTIL_RepackagePacketForSend() now correctly set NDIS_PACKET Flags field in cloned packet. Before this change the protocol ID was incorrectly set to NDIS_PROTOCOL_ID_DEFAULT. This told the adapter not to perform the offloaded checksum. Since the higher-level protocol was assuming that the adapter would perform the calculation, then checksum in the packet was incorect. The symptoms of this problem included being unable to browse the Network Neighborhood on certain adapters - often 3Com adapters that support NDIS ask offload. This problem was seen most often when using the active Passthru NDIS IM sample. 1.2.) Now copy per-packet information in CLReceivePacket and UTIL_CloseReceivedPacket. 2.) Fixed two bugs that occurred when entering STANDBY: 2.1) Eliminated page fault in MPSetInformation() when entering STANDBY. Made changes to MPSetInformation() routine (NDISREQ.C) to eliminate calling CLRequestComplete() in two cases there an immedate failure should have been returned. Now return() instead of break in two places: i.) after call to HandleMPSetInfoForPNPSetPower() and ii.) when failing a set information request when the miniport device state is incorrect. 2.2) Eliminated hang in CLPnPNetEventSetPower() when entering STANDBY. Replaced call to NdisPacketPoolUsage() with use of new PacketPoolUseCount field in ADAPTER structure. Modified UTIL_AllocatePacket() and UTIL_FreePacket() to manage the new PacketPoolUseCount. 3.) Modification to accomodate OID_GEN_MAXIMUM_TOTAL_SIZE incorrect value when 802.1p Packet Priority is enabled. The returned maximum total size can be incorrect by size of 802.1p header (4 bytes) for unmarked packets such as ICMP Echo. The maximum total size value is used to determine the size of virtual memory allocated for packet data, and the incorrect value returned with 802.1p Packet Priority enabled resulted in allocated buffers being too small to accomodate some packets. See PCAUSA KB Article KB06010101 for more information. The change was made in ADAPTER.C and involved adding TOTAL_SIZE_PAD to the amount allocated. The ADAPTER and TotalSize value was left to be the value actually returned from the lower-level NIC driver. 4.) ImUtil application enhanced to display PCASIM driver capability bitmask information. Other small improvements to data output format. 5.) Added new "CryptoPing" sample. This illustrates mofification of packets being sent and received. The sample encrypts ICMP Echo Requests as they are sent and ICMP Echo Reply packets as they are received. ====================================================================== Component Version : 2.04.05.13 Release Date : May 7, 2001 *** Beta 2 Release *** 1.) Major bug fix for faults when calling NdisMIndicateReceive on some PCMCIA adapters. In UTIL_AllocatePacket now zero the MacReserved area after calling NdisReinitializePacket. See PCAUSA KB Article KB05050101 for more information. 2.) Removed unnecessary ASSERT from UTIL_MakePacketFromReceiveIndication. This unnecessary ASSERT was generated for certain adapters, including RealTek adapters, the indicate partial packets to the ReceiveHandler. The ASSERT made it appear as if the driver caused a fault on this adapter. In reality, the condition is handled correctly. 3.) Fixed essential bug that caused page fault when installing PCASIM on Windows XP. In CLBindAdapterHandler, called CLOpenAdapterComplete with incorrect parameter 1: WAS: SHOULD BE: CLOpenAdapterComplete( CLOpenAdapterComplete( g_CLProtocolHandle, (NDIS_HANDLE )pAdapt, *Status, *Status, LocalStatus LocalStatus ); ); 4.) Eliminated holding g_AdapterListLock while walking the g_AdapterList in two routines: UTIL_FindAdapterByVirtualAdapterName UTIL_FindAdapterByAdapterName Using these locks raised the IRQL and cause the NdisEquaString function to be called at an unacceptably high IRQL. 5.) Added some ASSERT statements to check IRQL before calling some string functions. 6.) Fixed several bugs exposed by the Windows XP Beta 2 Driver Verifier. 7.) Extended some preprocesor conditional statements to include NDIS51. 8.) Fixed ENDIAN bug in in_cksum(). Renamed in_cksum() to UTIL_in_cksum() for consistency. Made improvements to other revisions to functions that are byte order dependent. ====================================================================== Component Version : 2.04.05.12 Release Date : December 11, 2000 *** Beta 1 Release ***