From ReactOS Wiki
Revision as of 01:13, 18 March 2012 by BrentNewland (talk | contribs)
Jump to: navigation, search

Ntdll.dll is NOT synced with WINE, it is made by ReactOS (source)

The Native API Architecture is implemented in NTDLL.dll. Aside from containing Native API user mode entry points, NTDLL.dll also contains process startup and module loading code.

NTdll contains part of the Native API, including the C Run Time Library (RTL) api.




  • Implemented handle table and atom table (NTDLL)



  • Fixed binary search algroithm in LdrGetExportByOrdinal - numbers can reach negative values (Filip Navara)
  • Testing shows that Microsoft Windows does allow a thread to leave a critical section entered by another thread (Gé van Geldorp)
  • Implement _bsearch(), _lfind(), _ui64toa() and _ui64tow() (Eric Kohl)
  • Implement RtlFindLeastSignificantBit() and RtlFindMostSignificantBit() (Gé van Geldorp)
  • Implement RtlAccessAllowedAceEx() and RtlAccessDeniedAceEx() (Eric Kohl)
  • Use ACL constants and fix ACL-revision checks (Eric Kohl)
  • Fixed a bug in AppendUnicodeStringToString which could cause a null to be placed one position after the end of a completely full string (Art Yerkes)
  • Always return 8-byte aligned blocks (Gé van Geldorp)


  • Fixed a bug in AppendUnicodeStringToString which could cause a null to be placed one position after the end of a completely full string (Art Yerkes)
  • Corrected processing import directories to handle case when executable imports (Filip Navara)
  • Split LdrpProcessImportDirectory into LdrpProcessImportDirectory and to process all entries with the same name (Hartmut Birr)
  • RtlGetFullPathName_U() is supposed to check the parameter buff, it could be NULL (Thomas Weidenmueller)
  • Enable environment inheritance (Eric Kohl)
  • Implemented RtlCreateCriticalSectionSpinCount (Gunnar Dalsnes)


  • 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)



  • Fixed RtlLargeIntegerArithmeticShift() not to return uninitialized data from the stack (Thomas Weidenmueller)
  • Adapted RtlIntegerToUnicode() from RtlIntegerToChar() and RtlInt64ToUnicodeString() from RtlIntegerToUnicodeString() (Thomas Weidenmueller)
  • Implemented RtlIpv4AddressToStringA/W() and RtlValidRelativeSecurityDescriptor() (Thomas Weidenmueller)
  • Fixed RtlValidSecurityDescriptor() that attempted to validate nonexisting owner/group SID (Thomas Weidenmueller)


  • (Thomas Weidenmueller)
  • Implemented RtlHashUnicodeString
  • Moved ntdll's atom table implementation to Rtl, and rewrote it to use proper structures and to share the generic *implementation between ntoskrnl and ntdll
  • Updated the Rtl handle table implementation to use proper structures; however, reserved handles are not yet supported correctly

ChangeLog-0.2.8 RTL

  • Implement !DeletePinned case in RtlEmptyAtomTable. (Filip Navara)
  • Fixed the definition of RtlUnicodeStringToCountedOemSize. This will fix bug 756. (Hartmut Birr)
  • We have only to signal the event if someone waits on it in RtlLeaveCriticalSection. (Hartmut Birr)
  • Rewrote RtlCreateUserProcess, RtlCreateUserThread. Updated and fixed RtlExitUserThread, RtlFreeUserThreadStack. (Alex Ionescu)
  • Implement RtlCaptureContext (Alex Ionescu)
  • RtlRaiseException to handle cases when a user-mode debugger is present (Alex Ionescu)
  • RtlRaiseStatus as above, plus set the exception address and capture context (Alex Ionescu)
  • Fix RtlDispatchException, add cases for exceptions in the DPC stack and validate the validity of the exception frames. Add support for exception logging by the global flag. Use TRAP_FRAME/EXCPETION_FRAME instead of Context. (Alex Ionescu)
  • Fix RtlUnwind logic, support cases where it's called with custom arguments instead of NULL. (Alex Ionescu)
  • Reimplement RtlpCaptureContext to work properly, convert exception handler calling functions to INTEL syntax and fix some bugs (like checking for the right unwind flag, clearing volatile register values, etc. Also use some optimizations to increase speed. (Alex Ionescu)
  • Implement KiRaiseException, add SEH to all user-mode parameters and when copying data to the user-mode stack. (Alex Ionescu)
  • Implemented all the Dbg* APIs. (Alex Ionescu)


  • Implement NTDLL's CSR routines in a compatible way. Fix prototypes, argument count, deprecated functions and new functions. Also added NtSecureConnectPort. (Alex Ionescu)
  • Make NTDLL Ki* callbacks have SEH to protect them and return to kernel-mode with notification of any exceptions (Alex Ionescu)
  • Fix seriously broken User-Mode Ldr thunk and APC Callback prototypes (Alex Ionescu)
  • Fix KiUserExceptionDispatcher (Alex Ionescu)
  • Fixed multiple bugs in RTL string routines (Alex Ionescu)
  • Implement DbgPrintEx, vDbgPrintEx, and vDbgPrintExWithPrefix (Royce Mitchell)

See Also

  • Native API: Rtl is the second largest group of ntdll calls. These comprise the (extended) C Run-Time Library, which includes many utility functions that can be used by native applications, yet don't directly involve kernel support.