From ReactOS Wiki
Revision as of 08:49, 21 June 2009 by Fireball (talk | contribs) (Core)
Jump to: navigation, search

This is the changelog for ReactOS™ version 0.3.10 (released whenever), an open-source operating system designed to be binary executable - and device driver-compatible with Microsoft™ Windows NT™ and subsequent Microsoft operating systems such as Windows 2000™ and Windows XP™. ReactOS is written by the ReactOS development team, and the last previous version of ReactOS was version 0.3.9 (released 26 April, 2009).


Generic 0.3.10 Changes






Host Tools






Bootloader (FreeLoader)

  • Revert part of r40686 See issue #4471 for more details. (HervГc Poussineau)
  • Remove MachGetMemoryMap() and replace it by ArcGetMemoryDescriptor(). Rework memory initialization to use it. As a bonus, we're not limited anymore to 32 memory descriptors, and having more than 4GB of RAM doesn't lead to out of bounds accesses (HervГc Poussineau)
  • WINLDR: Repair LiveCD boot (HervГc Poussineau)
  • WINLDR: Fix SystemRoot path when booting in non-setup mode. WINLDR: Change path buffers to be MAX_PATH sized instead of an arbitrary 512 bytes value. (Aleksey Bragin)
  • Reenable partition table exploration, but switch off disk error reporting before doing it. (Aleksey Bragin)
  • WINLDR: Pass boot options to the kernel when booting in setup mode (it was disabled for debugging reasons). (Aleksey Bragin)
  • WINLDR: Use SystemRoot path as it is because after recent Herve's changes there is no need to do additional operations with it. (Aleksey Bragin)
  • Fix CDROM device registration: don't hardcode it to 0xE0, but register whatever device FreeLdr starts and which is not reported by BIOS as a hardisk. Fixes setupldr2. (Aleksey Bragin)
  • Remove empty debug print. (Aleksey Bragin)
  • Fix warning (HervГc Poussineau)
  • Disable partition table exploration, as long as it displays an error message if disk is not partitioned (HervГc Poussineau)
  • Implement agnostic architecture for file system access, according to Advanced RISC Computing Specification Version 1.2 Some shortcuts still exist, and will need to be addressed later Use this new API in the NTLDR-style loader (HervГc Poussineau)

Kernel and Executive (NTOSKRNL)

  • Fix accidentally committed change in a function prototype. Spotted by Stefan Ginsberg. (Aleksey Bragin)
  • Make use of the implemented transfer counter. (Aleksey Bragin)
  • Implement a helper for updating IO transfer counters. Based on a patch by Dmitry Chapyshev. (Aleksey Bragin)
  • IopCreateObjectTypes: Add a DeleteProcedure for Device Objects. IopUnloadDevice: After calling the drivers Unload routine, make the DriverObject temporary and dereference it. IopUnloadDriver: Check that the driver is not already unloading before trying to call unload routine. If any failure, dereference the DriverObject before returning STATUS code. On an attempt to unload the driver, loop through each DeviceObject and set DOE_UNLOAD_PENDING in device extensions flags. Before calling the driver's unload routine set DRVO_UNLOAD_INVOKED in DriverObject's flags. Fixes Bugchecks when attempting to load driver a second time and when unloading a driver that has upper level device attached. (Michael Martin)
  • Disable debugging traces for dbgk/io/lpc/ob/ps by default, removing mostly unused debug code from frequently used routines and decreasing image size by about 32 KB. Also fix the way some macros are defined so we don't end up with double semicolons after the preprocessor. (Stefan Ginsberg)
  • Implement ProcessIoCounters case in NtQueryInformationProcess. Patch by Dmitry Chapyshev. Turn on I/O operations counter. (Aleksey Bragin)
  • Debug pool allocator: Add support for paged pool debugging. (Aleksey Bragin)
  • Implement a special "debug pool" allocator which catches pool overruns. It evolved from an initial patch by Art Yerkes, and is fully independent from underlying pool implementation. It supports only non-paged pool and detects only overruns now. To enable, uncomment DEBUG_NPOOL define in mm/pool.c. (Aleksey Bragin)
  • Change storage of ReactOS-specific virtual address space from VadRoot to Vm EPROCESS structure member. Change containing "structure" from MM_AVL_TABLE to MMSUPPORT respectively . (Aleksey Bragin)





  • Fix formatting. (Michael Martin)
  • IopUnloadDriver: Only add the DOE_UNLOAD_PENDING to the Device's DeviceExtensions Flags and check for attached devices and reference counts if the DriverObject->DriverUnload is valid. Verified on XP. IopLoadUnloadDriver: Add a check to verify that ImagePath.Buffer is non null before freeing it. (Michael Martin)
  • IopDeleteDevice: Fix a typo. (Michael Martin)
  • IoGetLowerDeviceObject: Return lower device object if pending flags are not set. Noticed by Johannes Anderwald. (Michael Martin)
  • IopCreateDriver: Change MajorFunction routines back to internal function IopInvalidDeviceRequest for ones that were set to NULL in the Drivers DriverEntry. Windows does it and so shall we. (Michael Martin)
  • Fix a potential crash in IoGetLowerDeviceObject if nothing is attached to us (Cameron Gutman)
  • Add missing pool allocation failure branch in NtSetInformationFile, and a missing PAGED_CODE check. Spotted by Dmitry Chapyshev. (Aleksey Bragin)
  • Initialize IoCountOperations variable to FALSE by default. Spotted by Dmitry Chapyshev & winetests. (Aleksey Bragin)
  • IRP_MN_FILTER_RESOURCE_REQUIREMENTS passes the list also in Irp->IoStatus.Information Fixes a crash in CMI8738 driver (Johannes Anderwald)
  • Patch by JГcrГ_me Gardou (jgardou-at-yahoo-dot-fr) from bug #4388, should fix the "VirtualBox Guest Additions 2.2.2 mouse filter driver is crashing during boot" (bug #4454). (Dmitry Gorbachev)
  • Fix improper resource translation because of AddressSpace confusion (Cameron Gutman)
  • Fix writing of BootConfig to the registry (previously, it wrote contents of DEVICE_NODE structure and caused nonpaged pool overrea). Similar error a few lines below was fixed by hpoussin in r15691. (Aleksey Bragin)
  • Fix driver object type DeleteProcedure so that it actually unloads driver's image. Make IopUnloadDriver work accordingly (it shouldn't try to unload an image when its object has already been deleted). Drivers can now be unloaded in ReactOS, this probably fixes a number of hardware-related applications and applications using hardware protection. (Aleksey Bragin)



  • Lowercase STATIC and CONST. Fixes build with DBG but without KDBG. (Dmitry Gorbachev)
  • Clear up debugger prompt from "mouse excrements". Tested in QEMU, Bochs, VirtualBox. (Dmitry Gorbachev)



  • Add SectionHandle probing (Dmitry Chapyshev)
  • Add probing of the result buffer Add missing target process reference/dereference in MemorySectionName case of NtQueryVirtualMemory. Fixes 2 "psapi_winetest" failures. (Dmitry Chapyshev)
  • MmUnmapViewOfSection: Unlock address space before notifying debugger. Fixes a case where OllyDbg deadlocks in a GateWait while trying to read virtual memory. (Michael Martin)
  • MiFindExportedRoutineByNam: Correct an typo in assert that caused MmGetSystemRoutineAddress to assert after finding a valid non forwarder function. (Michael Martin)
  • Properly disable tag validation if using debugging pool (fixes a wrong part of r41255). (Aleksey Bragin)
  • Add a note about increasing max pool sizes when using pool debugging. (Aleksey Bragin)
  • Add missing parameters probing. (Aleksey Bragin)
  • Add missing AVL tree initialization. (Aleksey Bragin)
  • MmGrowKernelStack: go back to the ASSERT and add a fixed check (Timo Kreuzer)
  • Add check of params for NtGetWriteWatch/NtResetWriteWatch (from Wine) Set Granularity to PAGE_SIZE Fixes crash in kernel32 virtual test (Dmitry Chapyshev)
  • MmGrowKernelStack: Don't assert, but fail, when the kernel stack can't grow any more. Fixes a crash with recursive user calls. See issue #4060 for more details. (Timo Kreuzer)
  • MmCreateSection: SectionPageProtection of PAGE_NOACCESS is valid in <=Win98, but not valid in the NT family. More kernel32_winetest fixes for virtual memory. (Michael Martin)
  • NtAllocateVirtualMemory, NtProtectVirtualMemory: Page Protection cannot be any combination of Memory Protection Constants, see MSDN. Add checks to handle non compatible combinations are fail. Fixes 6 more kernel32_winetest for virtual memory. (Michael Martin)
  • MmProtectAnonMem: Search all Regions in Memory Area up to Length for MEM_COMMIT prior to altering memory protection. Fixes 6 kernel32_winetest for virtual memory. (Michael Martin)
  • MmMapViewOfSection: Segment size must be a multiple of page size, so round ViewSize up to next page size. OllyDbg now shows loaded dll's in memory and can step into dlls. (Michael Martin)
  • NtFreeVirtualMemory: Pass RegionListHead from SectionData vice VirtualMemoryData to MmAlterRegion for MemoryArea->Type of Section view. Fixes MapViewOfFile tests for kernel32_winetests. More investigation is needed on whether this function should even succeed on FileMapping Objects. (Michael Martin)
  • Silence pool debugging debugprints. (Aleksey Bragin)
  • Make debug pool return 8-bytes aligned pointers. The padding area (up to 7 bytes) is not being checked for overruns now. ReactOS fully boots and works with this change and a debug pool. (Aleksey Bragin)


  • Make ObReferenceObjectEx return the new ref count instead of old ref count. Fix same bug ObDereferenceObjectEx. Fix a typo in ObDereferenceObjectEx which resulted in ObpDeferObjectDeletion not being called when needed. Fixes missing object deletions in ObDereferenceObjectEx-using code (e.g. executive timers in reactos kernel). Original problem found by, fixes inspired by the discussion too. (Aleksey Bragin)


  • Add target process reference/dereference in ProcessWow64Information case of NtQueryInformationProcess. Check buffer length (Dmitry Chapyshev)
  • Check buffer length for ProcessQuotaLimits/ProcessBasePriority/ProcessRaisePriority/ProcessWx86Information/ProcessDebugPort cases (Dmitry Chapyshev)
  • Add probing of the result buffers (Dmitry Chapyshev)
  • Implement ProcessQuotaLimits case for NtQueryInformationProcess. Based on Dmitry Chapyshev's patch. (Aleksey Bragin)
  • Add target process reference/dereference in ProcessLdtInformation/ProcessWorkingSetWatch/ProcessWx86Information cases of NtQueryInformationProcess. (Dmitry Chapyshev)
  • Add debug messages for unimplemented cases in NtQueryInformationProcess (Dmitry Chapyshev)
  • Add missed checks of the buffer length (Dmitry Chapyshev)
  • Add debug messages for unimplemented cases (Dmitry Chapyshev)
  • Implement ProcessPriorityClass case for NtSetInformationProcess(). Based on Dmitry Chapyshev's work and testing. (Aleksey Bragin)
  • Fix ProcessPriorityClass case in NtQueryInformationProcess. Structure PROCESS_PRIORITY_CLASS should be returned. Tested in win vista (Dmitry Chapyshev)


NT System Library (NTDLL)

  • Patch by Alexander Potashev <> LDRP_PROCESS_CREATION_TIME was a _flag_ which is now removed, the new 'LDRP_PROCESS_CREATION_TIME' is not a flag, it's just a constant to identify a special value of LoadCount. (Art Yerkes)
  • Fix handle / memory leak in failure branch, spotted by Dmitry Chapyshev. (Aleksey Bragin)
  • Fix obvious bugs in the code (e.g. freeing a stack-allocated pointer). Rewrite the code to be more readable. Enlarge static buffer for SearchPathBuffer to be at least 5*MAX_PATH to prevent possible overflowing for now. In the meanwhile, Dmitry is rewriting this part of code to dynamically allocate the memory without the need for a temporary static storage. (Aleksey Bragin)
  • Add support of additional paths of loading dlls (fixes loading dlls in X-Chat) See issue #4201 for more details. (Dmitry Chapyshev)

Run Time Library (RTL)

Kernel Mode Drivers

  • Improve user mode buffer probing (Johannes Anderwald)
  • Fix 2 typos (Cameron Gutman)
  • Report that we are NDIS 5.1 (Cameron Gutman)
  • Big debugging update Also fix some little bugs and reduce code duplication (Cameron Gutman)
  • Make CancelId a LONG (Cameron Gutman)
  • modified drivers/filesystems/fastfat/blockdev.c modified drivers/filesystems/fastfat/dirwr.c modified drivers/filesystems/fastfat/ea.c modified drivers/filesystems/fastfat/finfo.c Silence "argument unused" warnings Corrected several accesses to potentially uninitialized variables modified drivers/filesystems/fastfat/vfat.h Visual C++ is no longer a guarantee of compilation with the DDK Patch by Samuel SerapiГ_n <> (KJK::Hyperion)
  • modified drivers/input/i8042prt/createclose.c modified drivers/input/i8042prt/i8042prt.c modified drivers/input/i8042prt/keyboard.c modified drivers/input/i8042prt/misc.c modified drivers/input/i8042prt/mouse.c modified drivers/input/i8042prt/readwrite.c Silence "argument unused" and "unused variable" warnings Corrected several accesses to potentially uninitialized variables Patch by Samuel SerapiГ_n <> (KJK::Hyperion)
  • modified drivers/bus/pci/fdo.c modified drivers/bus/pci/pci.c modified drivers/bus/pci/pdo.c Silence "argument unused" warnings Corrected a potentially uninitialized variable access Patch by Samuel SerapiГ_n <> (KJK::Hyperion)
  • Make NdisGeneratePartialCancelId safe by using Interlocked functions (Cameron Gutman)
  • Don't reinitialize in case of error. Fixes a "DPC > 1 sec" problem related to an infinite loop in usbdriver. (Aleksey Bragin)
  • Fix NULL pointer access in an error branch inside hub_clear_port_feature_completion(). Thanks to Christoph for testing. (Aleksey Bragin)
  • Implement NdisIMGetBindingContext and NdisIMGetDeviceContext (Cameron Gutman)
  • Header cleanup (Cameron Gutman)
  • Implement NdisIMCopySendPerPacketInfo and NdisIMCopySendCompletePerPacketInfo (Cameron Gutman)
  • Implement NdisGeneratePartialCancelId (Cameron Gutman)
  • Patch by Olaf Siejka (caemyr gmail com): add stubs for unimplmented cases in ScsiPortNotification (Timo Kreuzer)
  • Implement NdisCancelSendPackets (Cameron Gutman)
  • MINIPORT_CONFIGURATION_CONTEXT must be allocated from nonpaged pool as it contains a spinlock (Stefan Ginsberg)
  • Check in wdmaud if a pin with the specified filter id and pin id has been opened Partly rewrite SysAudio as it is no longer required to store client specific information per connection since wdmaud just opens one connection Verify all audio handles at incoming irp (Johannes Anderwald)
  • Topology nodes can have a nullable name Disable releasing resources when IPortFilterWaveCyclic is closed (Johannes Anderwald)
  • don't include private.h twice fix include path (Sylvain Petreolle)
  • Add a few sanity assert to KsCreate Pass a create item and use an object class when creating an object header Return zero mixer count when wdmaud fails to enumerate virtual device count Should fix high cpu usage after installing audio drivers (Johannes Anderwald)
  • Store servicegroup obtained from IMiniportDMus / IMiniportMidi Init function when IPortDMus / IPortMidi RegisterServiceGroup is not called (Johannes Anderwald)
  • Fix a bug in KsTopologyPropertyHandler Create a KSTOPOLOGY struct when creating the subdevice descriptor and pass the struct to KsTopologyPropertyHandler Implement enumerating mixer devices Change handle array to contain the target device type. Mixer handles are not real handles, they are just pseudo handles Forward KSPROPSETID_Topology request to portcls (sysaudio) (Johannes Anderwald)
  • Add cases for IOCTL_SCSI_MINIPORT and IOCTL_SCSI_PASS_THROUGH (Dmitry Chapyshev)
  • Check to see that the packet status isn't NDIS_STATUS_RESOURCES before forwarding the packet descriptor to the ReceivePacketHandler (Cameron Gutman)
  • Rewrite MiniQueryInformation so it creates a NDIS_REQUEST and passes it to MiniDoRequest for processing to reduce code duplication Call MiniportCoRequest in connection-oriented miniports Now our NDIS loads all the way to the ASSERT for unsupported media on XP (Cameron Gutman)
  • Fix our handler checks Now XP's intermediate miniport drivers can load on ROS's NDIS More work still needs to be done to get them working though (Cameron Gutman)
  • Register the adapter shutdown handler if it is specified in the miniport characteristics (Cameron Gutman)
  • Disable debugging flood (Johannes Anderwald)
  • Also Store audio filter object header in FsContext member Create the pin on the correct filter by using the filters object class Remove filter object class before performing actual create request Remove object header from audio filter when closing Retrieve internal object class name with internal IOCTL_KS_OBJECT_CLASS Avoid using interface name as ReactOS doesn't support it Store object class name when creating the object header for the audio sub device Implement IPortFilterTopology interface Activate pin property handle for port topology driver There is no need to create a handle to sysaudio for each application opening wdmaud, use only one connection per driver basis Pass object create class to pin creation method by duplicating KsCreatePin Audio devices should now be accessible again (Johannes Anderwald)
  • Revert r41287 (Cameron Gutman)
  • Fix the map register count check (Cameron Gutman)
  • Revert 40694 as FIELD_OFFSET is perfectly working code and the new one might not work on some compilers Add informal debug traces for bug 4354 (Johannes Anderwald)
  • Remove a few bad (PLIST_ENTRY) casts (Johannes Anderwald)
  • Export NdisFreeToBlockPool (Cameron Gutman)
  • Remove an incorrect comment (I wasn't thinking when I wrote it ;)) Add an ASSERT for an unhandled case (Cameron Gutman)
  • Enable the code in NdisSetTimerEx Add a debug print (Cameron Gutman)
  • Forgot to free DmaContext (Cameron Gutman)
  • Finish our NDIS S/G DMA implementation Totally untested due to lack of HAL S/G support (Cameron Gutman)
  • Add missing exports to videoprt (Timo Kreuzer)
  • Handle IRP_MN_QUERY_PNP_DEVICE_STATE (Cameron Gutman)
  • Register a device interface for each miniport (Cameron Gutman)
  • Implement and export NdisCompareAnsiString, NdisCompareUnicodeString, and NdisInterlockedAddLargeInteger (Cameron Gutman)
  • Export the stubs for NdisRegisterTdiCallBack, NdisSetProtocolFilter, and NdisClGetProtocolVcContextFromTapiCallId Remove some extra stuff Move implemented stuff to misc.c Add some debug prints (Cameron Gutman)
  • Patch from Olaf Siejka <olaf_siejka AT o2 DOT pl> Stub out more IRP type cases instead of printing "Unknown IOCTL" (Stefan Ginsberg)
  • Return NDIS 5.1 in NdisGetVersion (its XP+) (Sylvain Petreolle)
  • Implement and export NdisOverrideBusNumber (Cameron Gutman)
  • Implement NdisGetSharedDataAlignment and NdisGetVersion (Dmitry Chapyshev)
  • Fix build (Cameron Gutman)
  • Export and stub NdisAllocateFromBlockPool, NdisCancelSendPackets, NdisCoAssignInstanceName, NdisCoGetTapiCallId, NdisCreateBlockPool, NdisDestroyBlockPool, NdisGeneratePartialCancelId, NdisGetRoutineAddress, NdisGetSharedDataAlignment, NdisGetVersion, NdisIMGetCurrentPacketStack, NdisIMNotifyPnPEvent, NdisQueryPendingIOCount, and NdisSetPacketStatus (Cameron Gutman)
  • Export and hackplement NdisSetTimerEx Implementation is #ifed out currently but I may enable it later Hopefully somebody can think of a better way to do it than the current code (Cameron Gutman)
  • Export stubs for NdisQueryBindInstanceName and NdisSetPacketPoolProtocolId (Cameron Gutman)
  • Export NdisGetFirstBufferFromPacketSafe, NdisGetPacketCancelId, NdisGetPoolFromPacket, NdisPacketSize, and NdisSetPacketCancelId (Cameron Gutman)
  • Export NdisCopyFromPacketToPacketSafe (Sylvain Petreolle)
  • Fix handling of nonpaged contiguous memory in NdisAllocateMemory and NdisFreeMemory (Cameron Gutman)
  • Implement IOCTL_KEYBOARD_QUERY_ATTRIBUTES (not used yet, see FIXME comment) Add KeyboardAttributes to I8042_KEYBOARD_EXTENSION (Dmitry Chapyshev)
  • Implement IOCTL_MOUSE_QUERY_ATTRIBUTES (untested) (Dmitry Chapyshev)
  • Use a reference name when registering audio subdevices (bug 4566) Release subdevice interface when it is no longer needed Fix a memory leak Audio support is on hold untill bug 4566 is resolved (Johannes Anderwald)
  • Report 5.2 as a version in UniATA rather than 4.1. It doesn't seem to introduce incompatibility, but is more realistic for the rest of the driver. (Aleksey Bragin)
  • Increase waiting time for DRQ removal inside AtapiInterrupt twice. Don't disable/enable IDE controller interrupts in AtapiSendCommand. This confuses Virtual Box's controller (it consumes one interrupt without ever emitting it) and thus sending any ATAPI command fails. Turn off ATAPI DMA raw read support by default. It seems to be incompatible with (at least) Virtual Box IDE controller. See issue #3645 for more details. (Aleksey Bragin)
  • i8042MouInternalDeviceControl: Forgotten from last commit. Partially implement internal IOCTLs IOCTL_INTERNAL_I8042_MOUSE_WRITE_BUFFER, IOCTL_INTERNAL_I8042_MOUSE_START_INFORMATION and IOCTL_MOUSE_QUERY_ATTRIBUTES. (Michael Martin)
  • Only register a shutdown handler if adapter initialization has succeeded (Cameron Gutman)
  • Register shutdown notification Close file objects / handles on shutdown (Johannes Anderwald)
  • Use a constant of the right type. (Dmitry Gorbachev)
  • return error code when there is a timeout improve error check in PcNewInterruptSync write an error log entry when a device fails to start (Johannes Anderwald)
  • Fix build, part 2. (Dmitry Gorbachev)
  • Trying to fix build. (Dmitry Gorbachev)
  • Don't release resource list May fix 4551 (Johannes Anderwald)
  • i8042MouInternalDeviceControl: Implement IoControlCode of IOCTL_INTERNAL_I8042_HOOK_MOUSE. ForwardIrpAndWait: Don't use IoForwardIrpSynchronously to Forward IRPs as it fails if no next stack location is available, which prevents the mouse from initializing. Changed it to match implementation of our other input drivers. Mouse pointer now works with VBoxMouse driver loaded. (Michael Martin)
  • Fix a bug that could result in Dma32BitAddresses being set if the caller specifies NDIS_DMA_24BITS (Cameron Gutman)
  • MajorFunction has IRP_MJ_MAXIMUM_FUNCTION positions Sorry for so many commits on the same function (Cameron Gutman)
  • We also shouldn't use our Shutdown handler (Cameron Gutman)
  • Don't use NDIS's ioctl handler for devices registered from NdisMRegisterDevice (Cameron Gutman)
  • Irp->AssociatedIrp.SystemBuffer is a PNDIS_OID (Cameron Gutman)
  • CreateClassDeviceObject: Add flag DO_BUFFERED_IO to match windows behavior. Revealed by mouse spying utility that expected that IO method. These mouse spying drivers should now work. (Michael Martin)
  • Do not overwrite *max_bcount. (Dmitry Gorbachev)
  • CreateClassDeviceObject/ClassAddDevice: Again do not create device with exclusive access. (Michael Martin)
  • CreateClassDeviceObject/ClassAddDevice: Do not create KeyboardClass device with exclusive access as it will prevent key loggers from working. (Michael Martin)
  • Fix our DMA implementation to use documented structs (Cameron Gutman)
  • Implement NdisReadPcmciaAttributeMemory and NdisWritePcmciaAttributeMemory Add some debug prints to NdisReadEisaSlotInformation (Cameron Gutman)
  • Implement NdisReadEisaSlotInformation (Cameron Gutman)
  • The slot number passed directly to NdisImmediateReadPciSlotInformation/NdisImmediateWritePciSlotInformation is ignored according to MSDN so store a valid slot number in the wrapper context to use instead (Cameron Gutman)
  • Implement NdisGetFirstBufferFromPacketSafe and NdisCopyFromPacketToPacketSafe (Cameron Gutman)
  • Implement NdisGetPoolFromPacket, NdisPacketSize, NdisGetPacketCancelId, and NdisSetPacketCancelId (Cameron Gutman)
  • Store the MTU in the packet extension for use during segmentation by miniport drivers (Cameron Gutman)
  • Remove some obsolete defines I apologize for any unnecessary rebuilds this may cause ;) (Cameron Gutman)
  • Enable several failure debug prints Add a debug print (Cameron Gutman)
  • Remove unused WdmAudWriteCompleted check for a valid object header in KsSynchronousIoControlDevice Apply alignment restrictions to all allocated buffers Fix handling IRP_MN_QUERY_INTERFACE, IRP_MN_QUERY_DEVICE_RELATIONS, IRP_MN_FILTER_RESOURCE_REQUIREMENTS IMiniportWaveCyclic::NewStream && IMiniportWavePci::NewStream take first the pin id and THEN the parameter capture. Fixes playback for ES1371 (VmWare) driver and many others Store IPortFilterWavePci, IPortFilterWaveRT, IPortFilterWaveCyclic in their corresponding port (Johannes Anderwald)
  • Remove some extra junk (Cameron Gutman)
  • Add CLSID_PortWaveRT Plugin IPortWaveRT port driver (Johannes Anderwald)
  • Fix WaitOnBusy, WaitOnBaseBusy and Wait[Short]ForDrq to wait and loop exactly the same as our existing atapi driver. This greatly enhances uniata's compatibility, especially on modern highspeed hardware where a controller usually didn't have enough time to change its state and was considered invalid. (Aleksey Bragin)
  • Use ExInterlockedList * functions for speed and stability Increment reference count on the correct miniport adapter from IPortDMus (Johannes Anderwald)
  • Don't cast NDIS_SPIN_LOCK directly to KSPIN_LOCK (Cameron Gutman)
  • Allocate space for the packet extension located at NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA) Fixes more packet corruption (Cameron Gutman)
  • Partly implement IMasterClock Implement IAllocatorMXF for IPortPinDMus Implement rendering midi streams using IMXF object WIP, not tested yet (Johannes Anderwald)
  • Implement IPortMidi, IPortFilterDMus, IPortPinDMus Implement reading / writing midi stream data using IMiniportMidiStream interface Delete old IPortMidi implementation (Johannes Anderwald)
  • When acquiring a mapping check if the mapping hasn't already been used Set tag value to zero when releasing a mapping (Johannes Anderwald)
  • Fix build (sorry) (Johannes Anderwald)
  • Use a spinlock with list functions over interlocked list functions Use a bitmap for storing reference count of the mappings as mapping are complete async and not very likely in determined order (Johannes Anderwald)
  • Fix debug statement Modify reference handling for irp mappings (Johannes Anderwald)
  • Declare IID_IDmaChannelSlave as it is not visible when using NTDDI >= Vista (Johannes Anderwald)
  • Implement support for IOCTL_NDIS_QUERY_GLOBAL_STATS (Cameron Gutman)
  • Register the unload handler so it gets called by NDIS (Cameron Gutman)
  • Return status code if releasing the mapping has succeeded Fix calculation of number of tags to be allocate per irp Fix multiple bugs when acquiring the mapping and releasing the mapping Vortex AU8810 WDM is now starting to play (Johannes Anderwald)
  • Implement and register a ProtocolUnbindAdapter handler (Cameron Gutman)
  • Add and register a ProtocolPnPEvent handler with some stubs in it (Cameron Gutman)
  • Fix build (Johannes Anderwald)
  • Implement IPortWaveRT, IPortFilterWaveRT, IPortPinWaveRT interface for audio drivers >= Vista (Johannes Anderwald)
  • Implement handing for IRP_MN_SET_POWER and IRP_MN_QUERY_POWER (not plugged in yet) Allocate a buffer and copy data into it instead of using the buffer passed to us directly Use a helper function to perform common operations which save lots of lines of duplicated code (Cameron Gutman)
  • Handle IRP_MN_QUERY_REMOVE_DEVICE and IRP_MN_CANCEL_REMOVE_DEVICE Implement NdisCompletePnPEvent Handle pending cases (Cameron Gutman)
  • Implement handling for IRP_MN_CANCEL_STOP_DEVICE (Cameron Gutman)
  • Implement handling for IRP_MN_QUERY_STOP_DEVICE (Cameron Gutman)
  • Ditto as r40781, but for ohci. Spotted by Cameron Gutman. (Aleksey Bragin)
  • Handle failure case correctly in *_submit_urb: remove URB from an endpoint's linked list, instead of corrupting this URB's memory. Thanks to Gregor Schneider for spotting the suspicious place. See issue #4279 for more details. (Aleksey Bragin)
  • Implement NdisCopyBuffer and NdisGetCurrentProcessorCpuUsage Patch by Dmitry Chapyshev (Cameron Gutman)
  • Translate the raw address before attempting to map it (Cameron Gutman)
  • Add debug prints to NdisMMapIoSpace (Cameron Gutman)
  • Fix memory corruption when reading binary data (Cameron Gutman)
  • Check for invalid ConfigurationContext Patch by Daniel Zimmermann with a slight modification by me (Cameron Gutman)
  • Pass IRP_MN_QUERY_DEVICE_RELATIONS down the stack (Cameron Gutman)
  • Fix build (try 2) (Cameron Gutman)
  • Wait for NdisMFreeSharedMemoryPassive to complete before returning See issue #4428 for more details. (Cameron Gutman)
  • Only call NdisMEthIndicateReceiveComplete once per batch of packets Slight performance increase (Cameron Gutman)
  • Silence a few debug prints The IrpQueue functions are called at DISPATCH_LEVEL, therefore use KeAcquireSpinLockAtDpcLevel instead Fix multiple bugs when using IrpQueue tag functions (Johannes Anderwald)
  • Remove test code which should never have come into trunk (Johannes Anderwald)
  • Fix IPortWavePci_Notify routine Add debug traces (Johannes Anderwald)
  • Experimental IPortPinWavePci implementation Refactor IPortWavePciStream initilization Add test code for IDrmAudioStream (Johannes Anderwald)
  • Implement KSPROPERTY_PIN_DATARANGES handler- Always return TRUE in FastDeviceHandler (faciliates testing with Vortex AU8820 WDM Driver) (Johannes Anderwald)
  • Free NdisMiniportBlock.Resources when we receive a stop irp (Cameron Gutman)
  • Also copy AllocatedResources from the stack to NdisMiniportBlock.Resources (Cameron Gutman)
  • Pass KSPROPERTY_SET to subdevice constructor Add debug traces on error case (Johannes Anderwald)
  • Fix support for asynchronously completed requests (Cameron Gutman)
  • Use Int32x32To64 to calculate timeout (Cameron Gutman)
  • Fix allocation of CM_RESOURCE_LIST Might fix bug 4354 See issue #4354 for more details. (Johannes Anderwald)
  • We don't need these debug prints anymore (Cameron Gutman)
  • Implement VideoPortPutDmaAdapter, VideoPortStartDma, VideoPortCompleteDma, VideoPortLockBuffer, VideoPortUnlockBuffer, (Johannes Anderwald)
  • Remove unused file Fix Es1370mp / Es1371mp driver installation. However, no sound yet. Needs more investigation (Johannes Anderwald)
  • Allocate memory for the OOB area also Set the NdisPacketOobOffset in each packet Fixes the mysterious packet corruption Fixes Realtek 8139 and Intel PRO/1000 (Cameron Gutman)
  • Add tons of ASSERT_IRQL / ASSERT_IRQL_EQUAL Queue a dpc when IServiceGroup::RequestService is called above dispatch level As a result writing to common buffer and completing irps can be done at the same time Start the stream at PASSIVE_LEVEL Check if key has been deleted in IRegistryKey object function Implement IRegistryKey::QueryRegistryValues (Johannes Anderwald)
  • Fix the size passed to RtlZeroMemory so it also zeros the protocol reserved memory (Cameron Gutman)
  • fix build (Timo Kreuzer)
  • Re-dispatch irp to the default handler (Johannes Anderwald)
  • Zero the whole packet in other packet allocation routines Set ValidCount TRUE because we don't have any buffers chained yet Set the fPACKET_ALLOCATED_BY_NDIS flag (fixes storing media-specific data) (Cameron Gutman)
  • Once a create handler indicates success, leave creation handler (Johannes Anderwald)
  • Increase importance of the audio dpc which finishes irps Once one second of audio data has been buffered, always queue audio irps and dont complete them imediately. Greatly improves the playback of SMPlayer and probably many other audio players which act strictly on the timing of completed irps Add debug traces when KsCreatePin fails (Johannes Anderwald)
  • Allocate work item for each filter / pin being opened Use ExInterlockedInsertTailList to insert a new audio device to prevent race conditions when more than one audio device is present Free work item in their target worker routine (Johannes Anderwald)
  • Allocate a work item for each specific request (start / stop / close) and free allocated work items (Johannes Anderwald)
  • Don't attempt to store packets and buffers in the same place (Cameron Gutman)
  • Add error debug traces (Johannes Anderwald)
  • Implement KSPROPERTY_PIN_CTYPE, KSPROPERTY_PIN_DATAFLOW, KSPROPERTY_PIN_COMMUNICATION for fast property handler (Johannes Anderwald)
  • Implement FastDeviceIoControl for IPortFilterWavePci Partly implement fast property handler (Johannes Anderwald)
  • Some work on freetype font driver (Timo Kreuzer)
  • Implement handling a FastDeviceIoControl path (not yet used in portcls) (Johannes Anderwald)
  • Fix return type of FastDeviceIo / FastRead / FastWrite (Johannes Anderwald)
  • Add an ASSERT (Cameron Gutman)
  • Implement NdisQueryAdapterInstanceName (Cameron Gutman)
  • Implement NdisMRegisterUnloadHandler, NdisMRegisterDevice, and NdisMDeregisterDevice (Cameron Gutman)
  • Implement NdisMGetDeviceProperty (Cameron Gutman)
  • Rename function to fix linking errors on x64 (Johannes Anderwald)
  • Forward & wait IRP_MN_START_DEVICE to lower device objects before starting the device Fix several irp leaks and return correct status in PcForwardIrpSynchronous (Johannes Anderwald)
  • Handle IRP_MN_QUERY_RESOURCE_REQUIREMENTS (Johannes Anderwald)
  • Silence a few debug prints Fix memory leaks on failure (Johannes Anderwald)
  • Drivers might use this unused area (Johannes Anderwald)
  • Activate IPortFilterWavePci (Johannes Anderwald)
  • Implement IPortFilterWavePci (based on IPortFilterWaveCyclic) (Johannes Anderwald)
  • Print the current and maximum lookahead to aid in debugging certain miniport drivers (Cameron Gutman)
  • Stub MiniSetComplete and MiniQueryComplete Register more handlers (Cameron Gutman)














Static Libraries





Win32™ Personality

Kernel-mode subsystem server (Win32K)




Control panel applets



Win32™ Applications

Command Prompt






Win32™ Libraries











Regression tests


Versions / Official Changelogs / Community Changelogs
0.0.x Series 0.0.8 | 0.0.9 | 0.0.10 | 0.0.11 | 0.0.12 | 0.0.13 | 0.0.14 | 0.0.15 | 0.0.16 | 0.0.17 | 0.0.18 | 0.0.19 | 0.0.20 | 0.0.21
0.1.x Series 0.1.0 | 0.1.1 | 0.1.2 | 0.1.3 | 0.1.4 | 0.1.5
0.2.x Series 0.2.0 | 0.2.1 | 0.2.2 | 0.2.3 | 0.2.4 | 0.2.5 | 0.2.6 | 0.2.7 | 0.2.8 | 0.2.9
0.3.x Series 0.3.0 | 0.3.1 | 0.3.2 | 0.3.3 | 0.3.4 | 0.3.5 | 0.3.6 | 0.3.7 | 0.3.8 | 0.3.9 | 0.3.10 | 0.3.11 | 0.3.12 | 0.3.13 | 0.3.14 | 0.3.15 | 0.3.16 | 0.3.17
0.4.x Series 0.4.0 | 0.4.1 | 0.4.2 | 0.4.3 | 0.4.4 | 0.4.5 | 0.4.6 | 0.4.7 | 0.4.8 | 0.4.9 | 0.4.10 | 0.4.11 | 0.4.12 | 0.4.13