

  1. About
  
  DKRNL32.DLL is the main part of HX DOS extender's Win32 emulation.
  It will be loaded by PE loader DPMILD32.EXE instead of KERNEL32.DLL.


  2. Win32 Functions currently emulated
  
  The following functions are exported from DKRNL32.DLL. The behaviour
  is not always exactly identical. Some procs are just dummies. For more
  details you will need HXSRC package, which contains the full MASM source
  code for DKRNL32.DLL.


  2.1 Time and Date
  
  To ensure that the time and date functions work properly you should
  set environment variable TZ. Please note that DKRNL32 currently ignores 
  the daylight saving rules.


  2.3 Floating Point Exceptions
  
  If FPU error conditions cause an Exception 10h in the DPMI client, they
  are fully compatible with SEH as implemented by DKRNL32. Regretably most
  servers don't do it that way, instead they report FPU errors by IRQ 13
  (interrupt 75h), even if this interrupt is masked - thus causing the 
  machine to hang. But even if the interrupt is unmasked, it will not work
  with DKRNL32's SEH, except if the server is HDPMI.

  
  2.2 Functions in Detail
  
  function                       comments
 ---------------------------------------------------------------------------
  AddAtomA                       dummy
  AllocConsole
  AreFileApisANSI
  BackupRead                     dummy
  BackupSeek                     dummy
  Beep
  CloseHandle
  CompareFileTime
  CompareStringA
  CompareStringW
  CopyFileA
  CopyFileW                      dummy 
  CreateConsoleScreenBuffer
  CreateDirectoryA
  CreateDirectoryW
  CreateEventA
  CreateFileA
  CreateFileMappingA 
  CreateFileMappingW
  CreateFileW
  CreateMutexA
  CreatePipe                     dummy
  CreateProcessA
  CreateProcessW                 dummy
  CreateSemaphoreA
  CreateThread
  CreateToolhelp32Snapshot
  DebugActiveProcess             dummy 
  DebugBreak
  DeleteAtom                     dummy
  DeleteCriticalSection
  DeleteFileA
  DeleteFileW
  DeviceIoControl
  DisableThreadLibraryCalls      dummy
  DosDateTimeToFileTime
  DuplicateHandle                file handles only
  EnterCriticalSection
  EnumCalendarInfoA              dummy 
  EnumResourceLanguagesA
  EnumResourceNamesA
  EnumResourceTypesA
  EnumSystemLocalesA             dummy
  ExitProcess
  ExitThread
  ExpandEnvironmentStringsA
  ExpandEnvironmentStringsW      dummy
  FatalAppExitA
  FileTimeToDosDateTime
  FileTimeToLocalFileTime
  FileTimeToSystemTime
  FillConsoleOutputAttribute
  FillConsoleOutputCharacterA
  FindAtomA                      dummy
  FindClose
  FindFirstFileA
  FindFirstFileW
  FindNextFileA
  FindNextFileW
  FindResourceA
  FindResourceExA
  FindResourceW
  FlushConsoleInputBuffer
  FlushFileBuffers
  FlushViewOfFile
  FormatMessageA                 dummy 
  FormatMessageW                 dummy 
  FreeConsole
  FreeEnvironmentStringsA
  FreeEnvironmentStringsW
  FreeLibrary
  FreeResource
  GetACP
  GetAtomNameA                   dummy
  GetCPInfo
  GetCommandLineA
  GetCommandLineW
  GetCompressedFileSizeA
  GetComputerNameA
  GetConsoleCP
  GetConsoleCursorInfo
  GetConsoleMode
  GetConsoleOutputCP
  GetConsoleScreenBufferInfo
  GetConsoleTitleA               dummy
  GetCurrentDirectoryA
  GetCurrentDirectoryW           dummy
  GetCurrentProcess
  GetCurrentProcessId
  GetCurrentThread
  GetCurrentThreadId
  GetDateFormatA
  GetDiskFreeSpaceA
  GetDiskFreeSpaceExA
  GetDriveTypeA                  
  GetDriveTypeW                  dummy
  GetEnvironmentStrings
  GetEnvironmentStringsA
  GetEnvironmentStringsW
  GetEnvironmentVariableA
  GetExitCodeProcess
  GetExitCodeThread
  GetFileAttributesA
  GetFileAttributesExA
  GetFileAttributesW
  GetFileInformationByHandle
  GetFileSize
  GetFileTime
  GetFileType
  GetFullPathNameA
  GetFullPathNameW  
  GetLargestConsoleWindowSize
  GetLastError
  GetLocaleInfoA
  GetLocaleInfoW                 dummy
  GetLocalTime
  GetLogicalDrives
  GetModuleFileNameA
  GetModuleFileNameW             dummy
  GetModuleHandleA
  GetNamedPipeHandleStateA       dummy
  GetNumberOfConsoleInputEvents  maximum is 1
  GetNumberOfConsoleMouseButtons
  GetOEMCP
  GetPrivateProfileIntA
  GetPrivateProfileStringA
  GetProcAddress
  GetProcessHeap
  GetShortPathNameA
  GetShortPathNameW
  GetStartupInfoA
  GetStdHandle
  GetStringTypeA
  GetStringTypeExA
  GetStringTypeW
  GetSystemDefaultLangID         dummy
  GetSystemDefaultLCID
  GetSystemInfo
  GetSystemTime
  GetSystemTimeAsFileTime
  GetTempFileNameA
  GetTempFileNameW               dummy 
  GetTempPathA
  GetTempPathW                   dummy
  GetThreadContext               dummy
  GetThreadLocale
  GetThreadPriority
  GetThreadSelectorEntry         dummy
  GetTickCount
  GetTimeFormatA
  GetTimeZoneInformation
  GetUserDefaultLangID           dummy
  GetUserDefaultLCID
  GetVersion
  GetVersionExA
  GetVolumeInformationA
  GetWindowsDirectoryA
  GetWindowsDirectoryW           dummy
  GlobalAlloc
  GlobalFlags                    dummy
  GlobalFree
  GlobalHandle
  GlobalLock
  GlobalMemoryStatus
  GlobalReAlloc
  GlobalSize
  GlobalUnlock
  Heap32First                    dummy
  Heap32ListFirst                dummy
  Heap32ListNext                 dummy
  Heap32Next                     dummy
  HeapAlloc
  HeapCompact
  HeapCreate
  HeapDestroy
  HeapFree
  HeapLock
  HeapReAlloc
  HeapSize
  HeapUnlock
  HeapValidate
  HeapWalk
  InitializeCriticalSection
  InitializeCriticalSectionAndSpinCount
  InterlockedDecrement
  InterlockedExchange
  InterlockedIncrement
  IsBadCodePtr                   dummy
  IsBadReadPtr                   dummy
  IsBadStringPtr                 dummy
  IsBadWritePtr                  dummy
  IsDBCSLeadByte
  IsDBCSLeadByteEx
  IsDebuggerPresent
  IsValidCodePage
  IsValidLocale
  LCMapStringA
  LCMapStringW
  LeaveCriticalSection
  LoadLibraryA
  LoadLibraryExA
  LoadLibraryExW                 dummy  
  LoadLibraryW
  LoadResource
  LocalAlloc
  LocalFileTimeToFileTime
  LocalFlags                     dummy
  LocalFree
  LocalLock
  LocalReAlloc
  LocalSize
  LocalUnlock
  LockFile
  LockFileEx                     dummy
  LockResource
  MapViewOfFile
  MapViewOfFileEx
  Module32First
  Module32Next
  MoveFileA
  MoveFileW
  MultiByteToWideChar
  OpenEventA
  OpenFile
  OpenFileMappingA               dummy
  OpenMutexA                     dummy
  OpenProcess                    dummy
  OutputDebugStringA
  OutputDebugStringW
  PeekConsoleInputA
  PeekNamedPipe
  Process32First
  Process32Next                  dummy 
  PulseEvent                     dummy
  QueryPerformanceCounter
  QueryPreformanceFrequency      dummy
  RaiseException
  ReadConsoleA
  ReadConsoleW
  ReadConsoleInputA
  ReadConsoleInputW              dummy 
  ReadConsoleOutputA
  ReadConsoleOutputAttribute
  ReadConsoleOutputCharacterA
  ReadFile
  ReadProcessMemory
  ReleaseMutex
  ReleaseSemaphore
  RemoveDirectoryA
  RemoveDirectoryW
  ResetEvent
  ResumeThread
  RtlFillMemory
  RtlMoveMemory
  RtlUnwind
  RtlZeroMemory
  ScrollConsoleScreenBufferA
  SearchPathA
  SearchPathW                    dummy
  SetConsoleActiveScreenBuffer
  SetConsoleCP
  SetConsoleCtrlHandler
  SetConsoleCursorInfo
  SetConsoleCursorPosition
  SetConsoleMode
  SetConsoleOutputCP
  SetConsoleScreenBufferSize
  SetConsoleTextAttribute
  SetConsoleTitleA
  SetConsoleWindowInfo
  SetCurrentDirectoryA
  SetCurrentDirectoryW           dummy
  SetEndOfFile
  SetEnvironmentVariableA
  SetEnvironmentVariableW        dummy
  SetErrorMode
  SetEvent
  SetFileApisToANSI              dummy
  SetFileApisToOEM               dummy
  SetFileAttributesA
  SetFileAttributesW
  SetFilePointer
  SetFileTime
  SetHandleCount
  SetHandleInformation           dummy
  SetLastError
  SetLocalTime                   dummy
  SetPriorityClass               dummy
  SetProcessWorkingSetSize
  SetStdHandle
  SetSystemTime                  dummy
  SetThreadContext               dummy
  SetThreadLocale                dummy
  SetThreadPriority              dummy
  SetUnhandledExceptionFilter
  SetVolumeLabelA                dummy
  SizeofResource
  Sleep
  SuspendThread
  SystemTimeToFileTime
  TerminateProcess               dummy
  TerminateThread
  Thread32First                  dummy  
  Thread32Next                   dummy
  TlsAlloc                       maximum 64 slots
  TlsFree
  TlsGetValue
  TlsSetValue
  UnhandledExceptionFilter
  UnlockFile
  UnlockFileEx                   dummy
  UnmapViewOfFile
  VirtualAlloc
  VirtualFree
  VirtualLock
  VirtualProtect
  VirtualQuery                   
  VirtualQueryEx                 dummy
  VirtualUnlock
  WaitForDebugEvent              dummy
  WaitForMultipleObjects
  WaitForSingleObject
  WideCharToMultiByte
  WinExec
  WriteConsoleA
  WriteConsoleW
  WriteConsoleInputA             dummy
  WriteConsoleOutputA
  WriteConsoleOutputAttribute
  WriteConsoleOutputCharacterA
  WriteFile
  WritePrivateProfileStringA
  WriteProcessMemory
  _lclose
  _lcreat
  _llseek
  _lopen
  _lread
  _lwrite
  lstrcat
  lstrcatA
  lstrcmp
  lstrcmpA
  lstrcmpW
  lstrcmpi
  lstrcmpiA
  lstrcpy
  lstrcpyA
  lstrcpyn
  lstrcpynA
  lstrcpynW
  lstrlen
  lstrlenA
  lstrlenW


  3. History

 2005.06.14:  version 2.8.15
 2005.06.11:  SEH now supports floating point exceptions if such 
              exceptions are reported by Exception 10h. Regretably
              this isn't the case with most DPMI servers, but the 
              standard way - FPU exceptions reported by IRQ 13 - will
              definitely not work :-( because of DPMI's stack switching
              thing.
 2005.06.11:  Win32 exception handler now can work even if called with
              an invalid FS segment register.
 2005.06.10:  init mouse with soft reset and use int 33h, ax=0014h to
              set/restore mouse event proc.
 2005.06.10:  HeapCreate: non-growable heaps implemented
 2005.06.10:  if out of kernel heap space display error msg on console,
              not just a debug message in debug version
 2005.06.08:  SetConsoleMode: allow mouse to be deactivated
 2005.06.07:  version 2.8.14
 2005.06.05:  CreateFileMappingW no longer dummy (but CreateFileMapping
              still doesn't support object name != NULL)
 2005.06.05:  version 2.8.13
 2005.06.05:  bugfix: UnhandledExceptionFilter didn't call RtlUnwind if
              exception filter function returned EXCEPTION_EXECUTE_HANDLER
 2005.06.05:  bugfix: EXCEPTION_RECORD.ExceptionRecord wasn't initialized
 2005.06.03:  bugfix: if exception filter function in UnhandledExceptionFilter
              returned with EXCEPTION_EXECUTE_HANDLER this was handled like
              EXCEPTION_CONTINUE_SEARCH.
 2005.06.02:  version 2.8.12
 2005.05.30:  bugfix: HeapDestroy may have failed to free all resources
 2005.05.30:  bugfix: HeapValidate didn't work for items located in other
              than the first region
 2005.05.29:  HeapWalk no longer dummy
 2005.05.29:  bugfix: HeapWalk destroyed stack because of wrong parameter
              declaration
 2005.05.29:  OutputDebugStringW now exported
 2005.05.29:  bugfix: if RemoveDirectory() failed it freezed the machine
              in versions 2.8.10 - 2.8.11.
 2005.05.28:  bugfix: DosDateTimeToFileTime() failed if seconds were just 60
 2005.05.28:  local times are supported if TZ environment variable is set.
              Daylight Saving Time is not supported.
 2005.05.28:  bugfix: SetFileTime() indicated a failure if "last access"
              or "creation" date/time couldn't be written. Now this
              errors are ignored if at least "last write" could be set.
 2005.05.28:  GetVolumeInformationA no longer dummy
 2005.05.22:  version 2.8.11
 2005.05.21:  bugfix: SEH didn't work for more than one exception frame.
 2005.05.21:  RtlUnwind no longer dummy
 2005.05.21:  bugfix: if parameter lpDistancetoMoveHigh in function
              SetFilePointer isn't NULL, the dword it is pointing to
              now is set to ZERO on exit.
 2005.05.20:  version 2.8.10
 2005.05.20:  bugfix: SetFilePointer didn't work with negative offsets
 2005.05.19:  bugfix: CreateDirectory set wrong error code [5] if directory
              already exists
 2005.05.19:  bugfix: WaitForMultipleObjects didn't return the correct
              value if parameter fWaitAll==FALSE
 2005.05.19:  bugfix: SetEvent/ResetEvent returned 0 even if event 
              handle was valid. 
 2005.05.18:  lstrcpynW added
 2005.05.18:  GetEnvironmentStringsW, FreeEnvironmentStringsW,
              no longer dummies
 2005.05.18:  Functions SetFileAttributesW, CreateDirectoryW, MoveFileW, 
              RemoveDirectoryW, GetCommandLineW, GetFullPathNameW,
              FindFirstFileW, FindNextFileW no longer dummies.                 
 2005.05.18:  LoadLibraryW, LoadLibraryExW added
 2005.05.17:  GetTempPathW, GetTempFileNameW, SearchPathW added (dummies)
 2005.05.17:  GetWindowsDirectoryA, GetWindowsDirectoryW (dummy) added
 2005.05.17:  AreFileApisANSI added
 2005.05.16:  VirtualQuery now works with separate stack region. This
              avoids fatal errors on some circumstances when running
              OW stack checking code. Works with DPMILD32 V2.8.7+.
 2005.05.14:  version 2.8.9
 2005.03.25:  bugfix: GetCompressedFileSizeA now works with LFN
              and returns -1 on errors.
 2005.01.19:  EXCEPTION_ACCESS_VIOLOATION: EXCEPTION_RECORD now with
              2 arguments in ExceptionInformation field, as it may be
              expected (for most DPMI servers these fields are NULL, though)
 2005.01.08:  version 2.8.8
 2005.01.08:  CompareFileTime added
 2005.01.08:  SetFileApisToOEM + SetFileApisToANSI (dummies) added
 2004.12.04:  bugfix: CreateThread didn't accept stack size 0 and
              caused a memory leak
 2004.12.03:  version 2.8.7
 2004.12.03:  dummy exports GetThreadSelectorEntry + DebugActiveProcess
              added. Allows TD32.EXE to be loaded (doesn't work yet)
 2004.11.28:  don't assume certain values for segment registers when 
              int 23h handler is called. Required for dosx and dosemu.
              (static lib dkrnl32s.lib only)    
 2004.11.25:  version 2.8.6
 2004.11.24:  some error checking in CreateProcess added
 2004.11.13:  BugFix: screen buffer created with CreateConsoleScreenBuffer
              had default attribute 00
 2004.11.01:  if 1. param in SearchPath was NULL an Int 3 was performed
 2004.10.10:  version 2.8.5
 2004.10.10:  BugFix: SearchPathA didn't work with lpPath parameter = NULL
 2004.10.10:  SearchPathA now uses GetFileAttributes function
 2004.10.10:  OpenFile added
 2004.10.10:  CreateProcess: application name converted to short file name
              before calling int 21h, ax=4B00h
 2004.10.10:  BugFix: SetFilePointer didn't return an error if new file 
              pointer value would be before start of file (is no error for
              int 21h, ah=42h)
 2004.10.10:  BugFix: GetFileAttributesA failed if a path ended with a '\'
 2004.10.09:  AddAtomA, DeleteAtom, FindAtomA, GetAtomNameA added
 2004.10.08:  UnlockFileEx added (dummy)
 2004.10.04:  version 2.8.4
 2004.10.03:  Read/WriteConsoleOutputAttribute added
 2004.10.03:  FreeConsole added
 2004.10.03:  GetPrivateProfileIntA added
 2004.10.03:  OpenMutexA, LockFileEx added (dummies)
 2004.09.30:  version 2.8.3
 2004.09.22:  BugFix: LockFile+UnlockFile called wrong DOS function
 2004.09.20:  BugFix: WriteConsoleOutputA ignored dwBufferCoord parameter
 2004.09.20:  file "CONOUT$" wasn't recognized by CreateFile
 2004.09.20:  console handling improved so it should work now with more
              than 1 console screen buffers.
 2004.09.18:  WriteConsoleInputA (dummy) added to support TDUMP.EXE
 2004.09.18:  version 2.8.2
 2004.09.18:  SetThreadLocale (dummy) added to support NASMW.EXE
 2004.09.18:  VirtualQuery now works with any address in range 0-BFFFFFFF
              (fix for ILINK32.EXE). This works reliable in plain DOS only.
 2004.09.18:  bugfix: VirtualAlloc with BaseAddress <> NULL didn't fail
              if memory region was reserved already.
 2004.09.17:  GetFileSize now uses int 21h, ax=71A6h if LFN supported
 2004.09.17:  GetFileInformationByHandle now uses int 21h, ax=71A6h if
              LFN installed. Else sets at least the date/time and size fields
 2004.09.17:  BugFix: FindFirstFileA: translate error code 0012 returned
              by int 21h, ax=4E00 to 0002
 2004.09.17:  Bugfix: FindFirstFileA set wrong error code if LFN wasn't
              installed.
 2004.09.16:  Bugfix: CreateFileMapping with a file of size 0 fails now
 2004.09.16:  EnumResourceTypesA, EnumResourceNamesA, EnumResourceLanguagesA
              added (required by ILINK32.EXE)
 2004.09.15:  Local/GlobalFlags + Local/GlobalSize added
 2004.09.15:  GetSystemDefaultLangID+GetUserDefaultLangID added
 2004.09.15:  LockResource + FreeResource added
 2004.09.14:  kernel heap doubled to 32kb, MS LINK.EXE seems to need that
              if large libraries are to be build (FLAT version only)
 2004.09.14:  exception C0000017 thrown if out of kernel heap space
 2004.09.14:  makefile now creates DKRNL32.DLL and COFF object modules.
              For OMF support there exist TEXT.MAK and ESP16.MAK.
 2004.09.01:  version 2.8.1
 2004.09.01:  bugfix: GetLongPathNameA/W no longer returns full path in 
              any case
 2004.08.30:  version 2.8.0
 2004.08.30:  bugfix: GetFileAttributesExA may have destroyed SI
 2004.08.29:  bugfix: calling VirtualAlloc with low 12 bits of address
              not equal zero may have caused a page error because 1 page
              too less may have been committed
 2004.08.29:  version 2.7.9
 2004.08.29:  CreateFileW no longer dummy. This is a bugfix as well, because
              the old dummy stub returned 0, not -1.
 2004.08.29:  bugfix: GetDiskFreeSpaceExA parameter dwTotalNumberOfFreeBytes
              now checked for NULL
 2004.08.29:  GetStringTypeW no longer dummy
 2004.08.28:  GetLongPathNameA + GetLongPathNameW added
 2004.08.28:  GetShortPathNameW added
 2004.08.28:  LCMapStringW no longer dummy
 2004.08.28:  GetFileAttributesW no longer dummy
 2004.08.28:  FormatMessageW added (dummy)
 2004.08.21:  version 2.7.8
 2004.08.20:  bugfix: FindFirstFile/FindNextFile didn't call SetLastError
 2004.08.20:  bugfix: CreateFileA didn't clear HIWORD(eax) before SetLastError
 2004.08.15:  workaround: SC.EXE requires filed MEMSTAT.dwAvailPageFile > 0
 2004.08.13:  calling VirtualAlloc with size=0 now returns NULL in all cases
 2004.07.24:  GetLocalTime: DayOfWeek now set
 2004.07.04:  GetDiskFreeSpaceExA added
 2004.07.04:  FindResourceW added
 2004.07.04:  InitializeCriticalSectionAndSpinCount added
 2004.06.16:  DosDateTimeToFileTime: add 1 to seconds to get the average
 2004.06.14:  bugfix: DeleteFile didn't work with LFN (win9x)
 2004.06.14:  bugfix: ScrollConsoleScreenBuffer now hides mouse during scroll
 2004.06.14:  bugfix: int 21h, ah=60 fails on NT platforms. Workaround added.
 2004.06.14:  bugfix: int 21h, ax=7160 often failed in GetFullPathName()
              because register CH was undefined
 2004.05.29:  SetErrorMode no longer called in LibEntry of Kernel32!
 2004.05.29:  bugfix: ScrollConsoleScreenBuffer scrolled 1 row/col too less
 2004.05.28:  34 text rows mode now with 34*14=476 scan lines
 2004.05.23:  AllocConsole added
 2004.04.28:  bugfix: GetStringTypeW wrongly expected a LCID parameter
 2004.04.26:  bugfix: GetCurrentProcess didn't work for MZ executables
 2004.04.26:  refer to external __USESEH to ensure SEH is included in MZ exes
 2004.04.26:  in SEH: dont touch nonexisting fields in TIB for MZ executables
 2004.04.24:  QueryPerformanceFrequency added (dummy)
 2004.04.22:  CreateEventA now works with names, OpenEventA no longer dummy
 2004.04.22:  GetNamedPipeHandleStateA added (dummy)
 2004.04.22:  SetHandleInformation added (dummy)
 2004.04.22:  debug support functions activated (dummy)
 2004.04.22:  SetSystemTime added (dummy)
 2004.04.21:  WinExec added
 2004.04.19:  init of static TLS now done later after os check is done
              because of problems on NT for such PEs (DCC32.EXE)
 2004.04.18:  CreateEvent with empty string now returns no error
              and sets last error to 0. Named events still fail.
 2004.04.18:  UnhandledExceptionFilter: general registers are displayed
 2004.04.18:  GetFullPathNameA didn't set last error code
 2004.04.17:  EnumCalendarInfoA added (dummy)
 2004.04.17:  GlobalHandle added
 2004.04.17:  FindResourceA now works with strings as names/types
 2004.04.17:  bugfix: FindResourceExA now works
 2004.04.17:  bugfix: MapViewOfFileEx didn't work with base address != 0
 2004.04.17:  Beep now uses timer 2 (works with DOSEMU)
 2004.04.16:  bugfix: VirtualSetPageAttr returns no error if host is V0.9
 2004.04.16:  On initialization of DKRNL32.DLL error mode is set so as
              default DPMILD32 file load errors aren't displayed any more.
              (DCC32.EXE tries to load some strange dlls and this really
              shouldn't be displayed to the user).
 2004.04.16:  SetErrorMode now will handle SEM_NOOPENFILEERRORBOX
 2004.04.16:  GetStringTypeExA added
 2004.04.16:  FindResourceExA added
 2004.04.16:  Local/GlobalReAlloc added
 2004.04.08:  VirtualQuery now implemented partially
 2004.04.08:  GetConsoleTitleA added
 2004.04.02:  avoid CLI/STI if app is single-threaded
 2004.03.31:  Sleep with parameter != 0 now works on NT platform as well
 2004.03.31:  bugfix: ScrollConsoleScreenBuffer scrolled 1 line too much
 2004.03.31:  SetConsoleScreenBufferSize now accepts 30 and 34 lines
 2004.03.30:  Ctrl-Break signaled in Read/PeekConsoleInput
 2004.03.30:  for NT platforms, install a INT 31 interrupt handler
              and return C for DPMI 1.0 functions, which dont exist here.
 2004.03.30:  SetConsoleCursorInfo: make cursor invisible now works correctly
 2004.03.29:  Sleep now checks parameter
 2004.03.29:  FillConsoleOutputxxx now checks for buffer overflow
 2004.03.28:  ReadConsoleInput now signals Ctrl-C as well
 2004.03.28:  bugfix: SetConsoleCtrlHandler didnt check for NULL as 
              handler routine
 2004.03.27:  ReadConsoleOutputCharacterA added
 2004.03.27:  SetConsoleTitleA added (dummy)
 2004.03.25:  bugfix: SetUnhandledExceptionFilter didn't return previous
              filter proc
 2004.03.25:  app terminates when UnhandledExceptionFilter proc returns
 2004.03.23:  RtlUnwind will NOT terminate app if it has nothing to do
 2004.03.21:  VirtualAlloc: reserved memory now allocated on 64 kB boundary
 2004.03.21:  OpenFileMappingA added (dummy)
 2004.03.21:  GetComputerNameA added
 2004.03.21:  GetThreadLocale added
 2004.03.21:  SizeofResource added
 2004.03.21:  LoadLibraryExA added
 2004.03.21:  OpenEventA added (dummy)
 2004.03.20:  bugfix: GetFullPathName handles ax=7160h returncode correctly
 2004.03.18:  irq 01 handler no longer assumes DS=FLAT, uses csalias instead
 2004.03.18:  bugfix: WaitForMultipleObjects returns correct index
 2004.03.18:  disable interrupt handler routines in CreateProcess
 2004.03.12:  LCMapStringA and GetStringTypeA now partially supported
 2004.03.12:  VirtualAlloc supports uncommitted memory (if supp. by dpmi host)
 2004.03.11:  GetSystemDefaultLCID + IsBadStringPtrA added
 2004.03.10:  bugfix: if DPMI function 0506h (get page attributes) was
              implemented by DPMI host but didn't also supply DIRTY bits,
              MapViewOfFile failed for writable files.
 2004.03.07:  bugfix: GlobalMemoryStatus returned wrong virtual mem values
 2004.03.06:  bugfix: VirtualAlloc: committing memory for a reserved memory
              area returned wrong base address.
 2004.03.06:  HeapReAlloc: if item is shrinking address doesnt change anymore
 2004.03.06:  HeapFree: return error if item is already marked as free
 2004.02.04:  GetNumberOfConsoleMouseButtons, FlushConsoleInputBuffer added
 2004.02.03:  mouse event proc now called as real mode callback, since this
              works for winnt/2k/xp as well
 2004.02.02:  bugfix: ReadConsoleInput now waits if no event is available
 2004.02.02:  mouse support for console functions
 2004.02.01:  bugfix: HeapReAlloc may have caused GPFs and didnt free old block
 2004.02.01:  FILETIME now really has 100-nanoseconds intervals since 1.1.1601
 2004.01.31:  SetFileTime now real
 2004.01.31:  GetShortPathNameA added
 2004.01.27:  bugfix: ScrollConsoleScreenBuffer
 2004.01.26:  bugfix: Peek/ReadConsoleInput now more compatible
 2004.01.26:  bugfix: FindFirstFile with filespec="*" works now
 2004.01.25:  OutputDebugString doesnt display strings to dos
 2004.01.25:  bugfix: PeekConsole doesnt update control key status
 2004.01.25:  dummy CreateConsoleScreenBuffer + SetActiveConsoleScreenBuffer
 2004.01.25:  WaitForMultipleObjects added
 2004.01.25:  CreateEvent, SetEvent, ResetEvent added
 2004.01.25:  SetConsoleCP + SetConsoleOutputCP added
 2004.01.25:  Global/LocalLock + Global/LocalUnlock added
 2004.01.24:  IsDebuggerPresent added
 2004.01.23:  flag ENABLE_PROCESSED_xxxPUT is a handle related attribute now
 2004.01.23:  bugfix: CreateFile returned file handles with HIWORD(eax) != 0
 2004.01.23:  initTLS added: DKRNL32.DLL now supports static TLS in executable
 2004.01.23:  dummy procs BackupRead and BackupSeek added
 2004.01.21:  dummy proc SetVolumeLabelA added
 2004.01.20:  WriteFile checks flag ENABLE_PROCESSED_INPUT for console handles
 2004.01.20:  ReadConsole examines flag ENABLE_PROCESSED_INPUT
 2004.01.19:  bugfix: GetLargestConsoleWindowSize returned rubbish
 2004.01.19:  GetConsoleScreenBufferInfo: member srWindow now set
 2004.01.19:  WriteConsole examines flag ENABLE_PROCESSED_OUTPUT
              if set, translates lf to crlf
 2004.01.19:  IsDBCSLeadByte added
 2004.01.19:  dummy ExpandEnvironmentStringsA, ExpandEnvironmentStringsW added
 2004.01.19:  dummy procs CreateFileMappingW, CopyFileW added
 2004.01.19:  bugfix: GetDateFormatA didnt copy string to output buffer 
 2004.01.19:  GetConsoleOutputCP, GetTimeFormatA added
 2004.01.19:  procs ReadConsoleW and WriteConsoleW added
 2004.01.18:  bugfix: kernel process detach routines destroyed ebx register
 2004.01.01:  WritePrivateProfileString works partly (no deletion yet)
 2003.12.31:  GetPrivateProfileString works now
 2003.12.22:  VirtualProtect now able to write-protect pages
 2003.12.20:  Added GetConsoleCP
 2003.12.20:  Bug in DuplicateHandle fixed
 2003.12.20:  read16.asm no longer needed (now included in readfile.asm)
 2003.12.19:  RtlMoveMemory now works with overlapping areas
 2003.12.18:  GetEnvironmentVariableA no longer uses GetEnvironmentStringsA
              (which requires to alloc heap memory)
 2003.12.18:  SetEnvironmentVariableA now located in separate file
 2003.12.15:  FormatMessageA added.
 2003.12.15:  LoadLibraryA adds ".dll" extension if none is supplied
 2003.12.15:  DeleteFileA supports long filenames
 2003.12.15:  ReadProcessMemory/WriteProcessMemory now added (simple)
 2003.12.14:  GetPrivateProfileString/WritePrivateProfileString added (dummy)
 2003.12.13:  TLS now located on stack, FS:[002Ch] points to slots
              THREAD.ASM modifies this value on thread switches
 2003.12.13:  New functions GetDateFormatA, FileTimeToDosDateTime 				  
 2003.12.12:  bugfix: GetTempFileName didnt create the file
 2003.12.12:  VirtualAlloc with address specified: it will be
              checked now if block exists already.
             

  4. Copyright
 
  DKRNL32.DLL is part of HX DOS extender. All parts of this extender are
  freeware.
 
  Japheth (http://www.japheth.de)
 
 
