From ReactOS Wiki
Jump to: navigation, search


  • Added two new Cache Manager files added for the stubs (Alex Ionescu)
  • Fixed memory corruption in IopInitializeBuiltinDriver (Filip Navara)
  • Various bugfixes to IoQueryDeviceDescription and friends. The floppy driver now loads and finds the drive properly (Vizzini)
  • Use raw size for image sections if virtual size isn't specified (Nathan Lineback)
  • The root bus driver should return an empty resource list on IRP_MN_QUERY_RESOURCES (Eric Kohl)
  • Fixed prototypes of NtAddAtom, NtFindAtom, NtProtectVirtualMemory and *KeQueryInterruptTime (Filip Navara)
  • Fixed list traversing in MmAlterRegion to correctly handle Length that is greater than real memory area size (Filip Navara)
  • Added stubs for the Cache Manager by Alex Ionescu (Steven Edwards)
  • Callbacks implementation (Alex Ionescu)
  • Clean up return val checking of some mdl calls (Vizzini)
  • Store page numbers instead of physical address's within mdls (Hartmut Birr)
  • Allocate memory for mdl's for paging io from stack instead of the non paged pool (Hartmut Birr)
  • Exchanged source and target in WRITE_REGISTER_BUFFER_xxx (Hartmut Birr)
  • Retrieve Hardware IDs and Compatible IDs from the bus driver and attach them to the device node (Eric Kohl)
  • Added a check for a waitable objects in NtWaitForSingleObject and *NtWaitForMultipleObjects (Hartmut Birr)
  • Fixed the start offset of a partition within an extended partition (in xHalIoWritePartitionTable) (Hartmut Birr)
  • Fixed some NULL-terminating issues that caused the 'videoprt.sys???????????????' module name problem (Filip Navara)
  • Fixed a wrong address in MmAlterViewAttributes which possible does cause a crash if the region is longer than one page (Hartmut Birr)
  • Implementation of IoQueryDeviceDescription. Patch by Alex Ionescu (Filip Navara)
  • Write the system boot device and start options to registry, also create the MiniNT registry key if needed (Filip Navara)
  • Fixed the searching for boot load drivers. This solves the pci driver loading problem (Hartmut Birr)
  • Set CurrentThread's u1.ExitTime to exit time in PsTerminateCurrentThread. Patch by Alex Ionescu (Filip Navara)
  • Return success for SystemFileCacheInformation requests to NtQuerySystemInformation, so we can see some information in the Task Manager (Filip Navara)
  • ReactOS-specific debugging functions KeRosDumpStackFrames and KeRosPrintAddress (Royce Mitchel III)
  • The last parameter of NtReadVirtualMemory should be optional (Filip Navara)
  • Removed an obsolete call to ExAllocatePool in CHECKPOINT (Hartmut Birr)
  • Do not immediately write the zeroed region to the disk for a cached file (Hartmut Birr)
  • Fixed a problem, which does occur if the cluster size is lower than the segment size (Hartmut Birr)
  • Implement kernel-mode range lists (Eric Kohl)
  • Install target must not rebuild executables (Eric Kohl)
  • Fixed the implementation of MmMapIoSpace (Hartmut Birr)
  • Fixed the implementation of IoBuildPartialMdl (Hartmut Birr)
  • Set Mdl's Process in MmMapLockedPages to current process and back to NULL in MmUnmapLockedPages (Filip Navara)
  • Implement SeQueryAuthenticationIdToken() (Eric Kohl)
  • Add audit function stubs (Eric Kohl)
  • Do not change the mapping count of a page if the physical address falls in the range of valid physical memory (in MmMapIoSpace and MmUnmapIoSpace) (Hartmut Birr)
  • Add some security function stubs (Eric Kohl)
  • Use bugcheck macros where appropriate so users have a better idea of why they crashed (Royce Mitchel III)
  • Implement multi-block bins. This removes all existing size limits within the registry (Eric Kohl)
  • Janitorial work (Eric Kohl)
  • Put the event from file object as user event into the irp in IopCloseFile and IopDeleteFile (Hartmut Birr)
  • Don't assign arc names to removable media drives like zip drives (Hartmut Birr)
  • Don't read the disk informations at boot time from removable medias like zip drives (Hartmut Birr)
  • Added Spinlock in ObpGetHandleCountbyHandleTable (Jim Tabor)
  • Fix recognition of CALL instruction. Spotted by Anich Gregor (Filip Navara)
  • Return reasonably correct result querying a null memory area. Still a TODO left (Mike Nordell)
  • Change bugcheck parameter to easily find out which SESSION5_INITIALIZATION_FAILED bugcheck occurred (Ge van Geldorp)
  • Make MmQuerySectionView tell how many bytes it actually did set. Fixes VirtualQuery (Mike Nordell)
  • MmQuerySectionView now returns correct AllocationBase (Hartmut Birr, Mike Nordell)
  • Proper way for counting process handles (Jim Tabor)
  • Add missing io performance counters (Eric Kohl)
  • SystemPerformanceInformation reads io counters (Eric Kohl)
  • Call the DriverStartIo routine at DISPATCH_LEVEL in IoStartPacket (Hartmut Birr)
  • Set the offset for a physical page in MmGetPhysicalAddress (Hartmut Birr)
  • Dereference the idle process in some of the NtQuerySystemInformation functions (Hartmut Birr)
  • Stop kernel crashing on thread termination (Mike Nordell)
  • Fixed my mistake in SystemProcessorInformation (Jim Tabor)
  • Fixed SystemProcessorInformation (Jim Tabor)
  • Set 386 as default cpu type (Jim Tabor)
  • Implementation of system performance auditing hax (Jim Tabor)
  • Improved Passive Level kernel and user time counters (Jim Tabor)
  • Fix Kernel User Timer and added ProcessTimes to QueryInformatinProcess (Jim Tabor)
  • Fix Kernel User Timer (Jim Tabor)
  • Add BasePriorty to ProcessBasicInformaion (Jim Tabor)
  • NtGetTickCount implementation (Jim Tabor, Filip Navara)
  • Implementation of system performance auditing hax (Jim Tabor)
  • Improved Passive Level kernel and user time counters (Jim Tabor)
  • Fix Kernel User Timer and added ProcessTimes to QueryInformatinProcess (Jim Tabor)
  • Fix Kernel User Timer (Jim Tabor)
  • Add BasePriorty to ProcessBasicInformaion (Jim Tabor)
  • Make mdl impl. more windows compliant (Gunnar Dalsnes)
  • Make mdl usage/impl. more windows compliant (Gunnar Dalsnes)
  • Filip Navara NtGetTickCount implementation (Jim Tabor)
  • Implemented new Ros exclusive function SystemFullMemoryInformation (Jim Tabor)
  • DBG/KD Types and Prototypes Added (Alex Ionescu)
  • Fixed KeRaiseUserException to return old EIP (Alex Ionescu)
  • Added DBG, FSRTL, Kd, Ldr, Lpc, Ex and Io Stubs (Alex Ionescu)



  • GuiConsoleUpdateBitmap ignores the color attribute of the first character in line, instead it takes the attribute of the last character of the previous line (Ge van Geldorp, Tonik)
  • Clean up calls from win32k to csrss (Ge van Geldorp)


  • Merge RPC runtime from Wine (Filip Navara)
  • Sync to Wine-20040615: (Ge van Geldorp)
  • Fix ref count on standard proxy creation (Robert Shearman)
  • Release channel buffer in StdMarshal_UnmarshalInterface, since we no longer use it and the proxy should have taken a reference on it (Robert Shearman)
  • GetModuleFileName[AW] doesn't terminate the string if the buffer is too small (Eric Pouech)
  • Fixed some issues found by winapi_check (Patrik Stridvall)


  • Initialize the serial port to reasonable state after the detection (required by Virtual PC) (Filip Navara)
  • Avoid collision with compiler generated label (Ge van Geldorp)


  • Fixed checking for a FAT file system on a removable media (Hartmut Birr)
  • Check more exactly for a FAT file system. (Hartmut Birr)
  • Improved the reading and writing of fragmented files (Hartmut Birr)
  • Don't return a file or allocation size for directories (Hartmut Birr)
  • Handle correctly "Unknown" media type in VfatHasFileSystem. This gets the floppy disk driver working (Filip Navara)



  • Interpret the sign for qualifier 'l' (Hartmut Birr)
  • Implement RtlFindRange() (Eric Kohl)
  • Implement RtlInvertRangeList() and RtlMergeRangeList() (Eric Kohl)
  • Correct search path for DLL loading (including directory from which .exe was loaded) (Pablo Borobia)
  • Initialized the variable status to get on success a proper return value (Hartmut Birr)
  • Fix Nt/ZwGetTickCount (Eric Kohl)
  • Report failure when function imported by ordinal isn't found (Filip Navara)
  • Added missing unlocking of handle table in RtlLookupAtomInAtomTable (Filip Navara)
  • Implement basic range list functions (Eric Kohl)
  • Implement range list copy and delete functions (Eric Kohl)
  • Implement RtlIsRangeAvailable() (Eric Kohl)
  • Handle ordinals which are not exported (Ge van Geldorp)
  • Move rtl/version|image|encode into rtl (Gunnar Dalsnes)


  • Simplified the mapping of video memory. Now it works in Virtual PC 2004 (Filip Navara)
  • Implementation of IOCTL_VIDEO_QUERY_CURRENT_MODE. Based on patch by Hervé Poussineau (Filip Navara)
  • Check buffer sizes and color counts for IOCTL_VIDEO_SET_COLOR_REGISTERS request (Filip Navara)
  • Map correct amount of the video memory (Filip Navara)
  • Add HwResetHw implementation that uses VBE set mode call to restore video mode (Filip Navara)
  • Fix video mode list traversing (Filip Navara, Royce Mitchel III)


  • Made some flags for the flag value from the FILE structure compatible with the mingw headers (Hartmut Birr)
  • Use _IO_LBF instead of _IOLBF, because _IOSTRG and _IOLBF has the same value (Hartmut Birr)
  • Fixed _chmod and _wchmod (Hartmut Birr)
  • Don't change the environment block if the number of variables has not changed (in BlockEnvToEnviron) (Hartmut Birr)
  • Use a copy of the environment strings (in BlockEnvToEnviron) (Hartmut Birr)


  • Fixed the open counter in IntVideoPortDispatchClose (Hartmut Birr)
  • VideoPortInt10 should copy back the output registers to caller (Filip Navara)


  • Fix broken MakeSureDirectoryPathExists. It depended on Wine's CreateDirectory, which seems to be more relaxed that the ros/Windows version (Gunnar Dalsnes)


  • Implement recursive deletion of start menu groups and desktop items (Eric Kohl)
  • Enable the creation of nested desktop and start menu groups (Eric Kohl)
  • Implement AddItemW() (Eric Kohl)
  • Implement DeleteItemW() (Eric Kohl)
  • Implement DeleteGroup() (Eric Kohl)
  • Implement ANSI profile directory functions (Eric Kohl)
  • Set ALLUSERSPROFILE environment variable upon logon (Eric Kohl)
  • Implement CreateGroup() (Eric Kohl)
  • Implement AddDesktopItem() and DeleteDesktopItem() (Eric Kohl)
  • Implement CreateUserProfileA() (Eric Kohl)


  • Added MDLs (Art Yerkes)
  • Return values from blocking socket functions when the socket is closed (Art Yerkes)
  • Changed the ad-hoc queueing into a system work item after kjk advised (Art Yerkes)
  • Recv now works every time (Art Yerkes)
  • Standardized on recvfrom request and reply everywhere (Art Yerkes)
  • Added a continuous parameter to FillWSABuffers for stream sockets (Art Yerkes)
  • Added function TryToSatisfyRecvRequest (Art Yerkes)
  • Removed extraneous and potentially confusing lock ReadRequestQueueLock (Art Yerkes)
  • Now both ReadRequestQueue and ReceiveQueue rely on ReceiveQueueLock (Art Yerkes)
  • Don't overwrite packet length (unclegarlic)
  • Added common irp handling (Art Yerkes)
  • Largely fixed work item. Irp breaks during completion (Art Yerkes)
  • Connect: removed work item given that we block (Art Yerkes)
  • Rawip: Removed the deallocation of the client-supplied mdl (Art Yerkes)
  • Provide BSD like interface to IP interfaces (Art Yerkes)
  • NDIS: Filter may be null early in the adapter binding process (Art Yerkes)
  • Checkpoint: connect/disconnect cycle working. IP input and IP output are talking to TCP without problems (Art Yerkes)
  • First rev where a full connect - receive - disconnect cycle worked, although data wasn't delivered to the client program (Art Yerkes)
  • Buffers are entirely correct (Art Yerkes)
  • Fixed a bug in NdisFreeBuffer which made us run out of buffers (Art Yerkes)
  • Fixed buffer problem in ndis (Art Yerkes)


  • Clear data buffer before sending the INQUIRY command (Eric Kohl)
  • Initialized the srb on each call to SpiSendInquiry (Hartmut Birr)
  • Implemented ScsiPortGetPhysicalAddress also for addresses from sense info buffer (Hartmut Birr)
  • Allocated the sense info buffer within contiguous physical memory (Hartmut Birr)
  • Don't send an sence request after an error if the miniport driver is autosense-capable (Hartmut Birr)
  • Implemented ScsiPortCompleteRequest (Hartmut Birr)
  • Fixed the calculation of the max transfer size (Hartmut Birr)
  • Rewrote parts of SpiScanAdapter and SpiSendInquiry to speed up device detection (Hartmut Birr)
  • Fixed the handling of sense info data for HBA's which are auto request sense capability (Hartmut Birr)
  • Added some more debug messages (Hartmut Birr)
  • Fixed the counting of pending irps (Hartmut Birr)
  • Use a bitmap for managing the srb extensions (Hartmut Birr)
  • Removed the complete request and next request counter (Hartmut Birr)
  • Enable the queues for the miniport driver, if they are supported (Hartmut Birr)
  • Fixed a bug in ScsiPortCompleteRequest (Hartmut Birr)
  • Reduced the size of the necessary inquiry data length to recognize a device as valid (Hartmut Birr)


  • Delegates messages directly to the edit control window proc instead of containing an edit control (Ulrich Czekalla)
  • Make Unicode const strings static so they are not copied to the stack each time we enter the function (Francois Gouget)


  • Implement the GUI setup wizard (Eric Kohl)
  • Add new dialogs to Czech language for translation (Eric Kohl)
  • Make install wizard code UNICODE aware (Eric Kohl)
  • Center install wizard (Eric Kohl)
  • Don't skip to next page as long as required data have not been entered (Eric Kohl)
  • Added SetFocus call for the username dialog (Gero Kuehn)


  • Update memory regression test and split MDL tests into new file series (Jason Filby)
  • Second MDL test (Jason Filby)

System Services

  • AcquireLoadDriverPrivilege() to fix problem with SCM not being able to load drivers (Filip Navara)
  • Initial hacky implementation of some SCM calls needed by coLinux (Filip Navara)

Named Pipe Driver

  • Fix a stupid bug that prevented writing to pipes from working (Filip Navara)
  • Fixed connection/disconnecting/closing handling, so we don't connect to dead and disconnected pipes (Filip Navara)
  • Handle the OPEN_EXISTING flag correctly (Filip Navara)
  • Report reasonable error messages instead of STATUS_UNSUCCESSFUL (Filip Navara)
  • Fixed various problems (hangs/crashes) with connecting, disconnecting and closing named pipes (Filip Navara)
  • Protect against reads from (and writes to) closed named pipes (Filip Navara)
  • Workaround for supporting a reads from pipe after the other end has been closed and data are still available in the buffers (Filip Navara)




  • Force importing _vsnprintf from MSVCRT. The NTDLL version doesn't support %f specifiers (Filip Navara)
  • Sync to Wine-20040615:
  • Sync to Wine-20040505:
  • Make our ascii strings static const (Francois Gouget)
  • Remove a couple string variables that were used only once and use the string literal directly (Francois Gouget)
  • Allow UrlCombine to calculate size of required buffer (Kevin Koltzau)
  • Sync to Wine-20040408:
    • Implement SHMessageBoxCheck functions && add dialog resources (Jon Griffiths)
  • Add SHWaitForSendMessageThread, SHAnsiToUnicodeCP,SHStripMneumonicW, SHSearchMapInt (Jon Griffiths)(Ge van Geldorp)
  • Make copies of keys when creating, free them when done (Jon Griffiths)
  • Use KEY_ALL_ACCESS when writing US reg values (Jon Griffiths)
  • SHRegWriteUSValueW: Handle all flag combinations (Jon Griffiths)
  • Make some A calls use the W version (Jon Griffiths)
  • Updated Spanish translations (Jose Manuel Ferrer Ortiz)
  • Implement FixSlashesAndColonW and add stub for SHGetAppCompatFlags (Ulrich Czekalla)
  • UrlCanonicalizeW: Remove \r and \n at the end of lpszUrlCpy, with test cases (Uwe Bonnes)







  • Added stubs for SetFileSecurityW(), GetNamedSecurityInfoA/W() and SetNamedSecurityInfoA/W() (Thomas Weidenmueller)
  • Fixed the third passed parameter to NtSetInformationThread call in ImpersonateLoggedOnUser (Filip Navara)
  • Fixed filename in include statement and added some debug prints for stubs (Thomas Weidenmueller)
  • Compile advapi32 using w32api (Eric Kohl)
  • Added comment to FreeSid (Gunnar Dalsnes)


  • Add REST_NONLEGACYSHELLMODE policy (Filip Navara)
  • Handle more notification messages to prevent "-- %p WM_COMMAND %x unhandled" messages (Filip Navara)
  • Much nicer-looking 8-bit versions of mycomputer.ico, drives.ico and desktop.ico (Royce Mitchel III)
  • Reserve ordinals 90 and 91. Fixes bug 182 (Ge van Geldorp)
  • Fixed run dialog not defaulting to the combobox (Royce Mitchel III)
  • Get rid of non-standard ERROR_UNKNOWN value (Filip Navara)
  • Merge Wine shell32 commits: (Martin Fuchs)
    • Improved error checking and conformance with Windows (Juan Lang)
  • Move control panel applet enumeration to cpanelfolder.c (Juan Lang)
  • Rewrite CreateFolderEnumList to only FindFirstFile/FindNextFile once (Juan Lang)
  • Cleanup the handling of the extension in SHELL_FindExecutable() (Francois Gouget)
  • Increase the size of the command buffer to 1024 (Francois Gouget)
  • Avoid to use return length of RegQueryValueW (Martin Fuchs)




  • Build Hardware IDs and Compatible IDs for PCI devices (Eric Kohl)


  • Includes: minor edits to make things go smoother (Art Yerkes)
  • Sleep: new signalling scheme to client (Art Yerkes)
  • Tcp_input and output: divorce better from ip_input and output (Art Yerkes)
  • Interface: now complete (Art Yerkes)
  • Uipc_*: remove reliance on lower layers to insert address mbufs on the sb queues (Art Yerkes)


  • Switched the sense of the onlyLoopback flag in getNumNonLoopbackAdapters and related functions (Art Yerkes)

Control Panel

  • Initial checkin of the non-shell-namespace-based control panel and software add/remove cpl (Gero Kuehn)


  • Allocate for each srb its one sense info buffer (Hartmut Birr)
  • Reinitialize the transfer size if a retry is necessary in ScsiClassSendSrbSynchronous (Hartmut Birr)


  • Basic Live CD building infrastructure (Filip Navara)
  • New font substitution: MS Sans Serif to Bitstream Vera Serif (Filip Navara)
  • Add missing nls settings for Great Britain, tTis fixes bug #344 (Eric Kohl)
  • Corrected shell paths (Filip Navara)



  • Use hardware description if available to initialize the serial mouse port (Eric Kohl)



  • SEH library (KJK::Hyperion)
  • Final touches to the SEH library: now comes with a very basic setjmp/longjmp implementation for when the compiler's native one can't be used (KJK::Hyperion)
  • Fixes for Borland C++ compilation, and one variable is now qualified "volatile" to disable dangerous optimizations (KJK::Hyperion)
  • Setjmp has one argument and returns zero (KJK::Hyperion)


  • Experimental Joliet generating support (Filip Navara)
  • Fixed cdname_exists to check only entries in specific directory (Filip Navara)
  • Move the DIRECTORY_FLAG logic to parse_filename_into_dirrecord (Filip Navara)


  • Implement dummy device settings pages (Eric Kohl)
  • Hide the cursor at startup (Eric Kohl)
  • Implement a generic selection list (Eric Kohl)
  • Use selection list in device settings pages.
  • Read device settings from txtsetup.sif (Eric Kohl)
  • Set selected keyboard layout and install language (Eric Kohl)
  • Implement mouse driver autodetection and installation (Eric Kohl)
  • Disable non-functional settings pages (Computer, Display and Keyboard settings) (Eric Kohl)
  • Add display type (VGA or VESA) selection (Eric Kohl)
  • Implement the ability to write the bootcode to a floppy disk (Eric Kohl)


  • Run Task Manager when CTRL-ALT-DEL is pressed (Filip Navara)
  • Support expanding environment variables in the setup command line (Filip Navara)


  • Blight pointed out that I was missing some regs from the end of the trap frame (Art Yerkes)
  • Fix the "use of cast expressions as lvalues is deprecated" warning (Filip Navara)


  • Fixed the calculated file attribute in CdfsFileFlagsToAttributes (Hartmut Birr)


  • Support for the End-Of-Line RLE mark (Filip Navara)
  • Treat the bitmap header field bV5ClrUsed correctly if it's set to zero (Filip Navara)
  • End-Of-Line marker at the real end of line shouldn't advance the vertical offset (Filip Navara)
  • Revert change to VGA register values that I accidently commited (Filip Navara)


  • Set the correct cdb length for the mode sens command in CdromClassCreateDeviceObject (Hartmut Birr)


  • Support multi-block bins (Eric Kohl)
  • Added support for including other .inf files while building the standard hives (Filip Navara)
  • Process the "DelReg" section in .inf files (Filip Navara)


  • XMLStorage update: XMLReaderBase (Martin Fuchs)
  • Re-enable DesktopWindow::OnDefaultCommand to open explorer windows on desktop double clicks (Martin Fuchs)
  • Fix opening explorer sub folders in MDI mode - problem spotted and debugged by Ge van Geldorp (Martin Fuchs)
  • Scroll mode for very long start menus (Martin Fuchs)
  • Capture mode while scrolling start menus (Martin Fuchs)
  • Use precompiled headers for VC++ builds (Martin Fuchs)
  • Don't delete icons that we got by WM_GETICON or GetClassIcon (Filip Navara)
  • Integrate optional SDI mode into main explorer branch (Martin Fuchs)
  • Show waitcursor when switching to anotehr dir (Martin Fuchs)
  • ShellBrowserChild: jump to addressbar target (Martin Fuchs)
  • Handle GetDateFormat) failures (Martin Fuchs)
  • Replace previous favorites start menu folder implementation by fast FavoritesMenu (using the internal XML bookmark informations) (Martin Fuchs)
  • Fix floating favorites menus (Martin Fuchs)
  • Activate web bookmarks in cabinet windows (Martin Fuchs)
  • Awake address bar to life (Martin Fuchs)
  • Simplified chinese resources (Larry Li)
  • Optimize favorites sidebar (Martin Fuchs)
  • Fix Entry::read_tree() and get_next_path_component() (Martin Fuchs)
  • Jump to FileChildWindow's directory when entered in address bar (Martin Fuchs)
  • Immediatelly maximize first MDI child window (Martin Fuchs)


  • Use FormatMessage() to print some error messages (Michael Fritscher)
  • Fixed handling of variable arguments and free memory allocated by FormatMessage() (Michael Fritscher, Thomas Weidenmueller)
  • Removed MakeSureDirectoryPathExistsEx (Hartmut Birr)
  • Use the current directory if GetTempPath fails (Hartmut Birr)
  • Inherit the handles to the child process (in Execute) (Hartmut Birr)
  • Assume that the current process is always a console process if ntdll exist but not contains the functions NtQueryInformationProcess or NtReadVirtualMemory (Hartmut Birr)
  • Fixed the set command for WinXP (Hartmut Birr)
  • The second parameter must be zero in the call to SetEnvironmentVariable if the variable should be deleted (Hartmut Birr)
  • Get first the parameters and do then the processing (Hartmut Birr)
  • CMD Enhancements: (Filip Navara)
    • Make the DIR /W behave like in Windows (Filip Navara)
    • Fixed various problems with command input going mad when the screen contents have scrolled (Filip Navara)
  • Make sure temp directory exist (Gunnar Dalsnes)
  • 'Del *.*' ignores directories, this fixes bug 291 (Eric Kohl)



  • System call thunk generation made marginally more portable (KJK::Hyperion)
  • Followed Casper Hornstrup's advice to use macros to simplify regression tests (Jason Filby)
  • Update to FreeType 2.1.8 (Ge van Geldorp)
  • Added Transgamings Marlett font replacement (Steven Edwards)