Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
/*
|
|
|
|
* NT basis DLL
|
2002-06-01 01:06:46 +02:00
|
|
|
*
|
1998-11-01 15:00:21 +01:00
|
|
|
* This file contains the Rtl* API functions. These should be implementable.
|
2002-06-01 01:06:46 +02:00
|
|
|
*
|
1998-11-01 15:00:21 +01:00
|
|
|
* Copyright 1996-1998 Marcus Meissner
|
1999-01-31 10:24:44 +01:00
|
|
|
* 1999 Alex Korobka
|
2002-03-10 00:29:33 +01:00
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
2000-07-29 23:56:59 +02:00
|
|
|
#include <stdio.h>
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
#include <string.h>
|
2000-02-10 20:03:02 +01:00
|
|
|
#include "windef.h"
|
1999-02-19 17:29:05 +01:00
|
|
|
#include "winerror.h"
|
2002-09-13 00:07:02 +02:00
|
|
|
#include "winternl.h"
|
1998-10-16 16:28:45 +02:00
|
|
|
#include "winreg.h"
|
2002-11-15 02:00:08 +01:00
|
|
|
#include "wine/unicode.h"
|
|
|
|
#include "wine/debug.h"
|
2003-03-15 00:16:46 +01:00
|
|
|
#include "ntdll_misc.h"
|
Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [graphics/x11drv/bitblt.c]
Fixed BITBLT_StretchImage for partially covered or inverted
bitmaps.
* [objects/dib.c]
Fixed the upside-down bitmap problem.
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
* [if1632/user32.spec]
IsMenu and RemoveMenu added (use existing Win16 functions).
* [include/windows.h]
Corrections to BITMAPINFOHEADER structure.
* [loader/module.c] [if1632/kernel32.spec]
New function GetModuleFileName32A (heavily based on original
Win16 version).
* [loader/pe_image.c]
Hack to allow files with short PE header to be loaded (e.g.
COMDLG32.DLL from Win32s).
* [misc/winsock_async.c]
#if out EIDRM case (not present in FreeBSD).
* [tools/build.c]
Remove trailing comments from .s files generated by build
as these break assembly when not run through pre-processor.
* [windows/graphics.c] [if1632/gdi32.spec]
New function Polyline32 - based on original Polyline. Needs
metafile support adding still.
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [win32/findfile.c] [if1632/kernel.spec]
FindFirstFile32A(): Use dos current directory for drive prefixes.
FindNextFile32A(): Fill in file attribute information.
Implement FindFirstFile16, FindNextFile16, FindClose16.
* [files/drive.c]
GetCurrentDirectory32A - Fix problem with null 3rd character in
string.
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [windows/painting.c][windows/message.c]
Don't use linked lists to call SendMessage(), for it might destroy
the current listentry.
* [misc/registry.c]
Fixed temporary file saving (rename doesn't work across
partitions).
* [files/*.c]
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
GetVolumeInformation32W fixed.
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
LoadLibrary* updated to new naming std., *32W added.
* [win32/console.c] [include/wincon.h]
Additions for NT commandline executables.
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
GetUserName32W added, GetComputerName32W added,
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
[if1632/ntdll.spec]
Lot of new unicode functions added (needed for NT).
* [loader/pe_image.c]
NtCurrentTeb added.
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/keyboard.c]
Rewrote function TranslateAccelerator().
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
* [windows/defwnd.c]
DEFWND_SetText(): Set icon name.
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
[if1632/winsock.spec]
IPC resource cleanup, bugfixes.
* [windows/dialog.c] [windows/defdlg.c]
More DefDlgProc() fixes.
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
[win32/newfns.c] [windows/graphics.c]
Added a few WIN32 functions which needed to run some win32
accessories. Clock should now work almost as well as 16 bit version.
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
Polygon32
Fix: Polygon16 possible memory leak on error return.
1996-12-15 20:45:59 +01:00
|
|
|
|
2002-03-10 00:29:33 +01:00
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
|
1999-04-19 16:56:29 +02:00
|
|
|
|
1999-02-17 14:51:06 +01:00
|
|
|
|
2001-08-16 20:12:56 +02:00
|
|
|
static RTL_CRITICAL_SECTION peb_lock = CRITICAL_SECTION_INIT("peb_lock");
|
2000-12-11 04:41:19 +01:00
|
|
|
|
1999-03-09 18:47:51 +01:00
|
|
|
/*
|
|
|
|
* resource functions
|
Release 970120
Sun Jan 19 11:46:48 1997 Alexandre Julliard <julliard@lrc.epfl.ch>
* [loader/module.c]
Fixed LoadModule() to always call the DLL initialization code.
* [windows/event.c]
Moved all the keyboard stuff to windows/keyboard.c
* [tools/build.c]
Fixed Win32 register functions.
Sat Jan 18 22:24:41 1997 David Makepeace <D.Makepeace@mailbox.uq.oz.au>
* [tools/makedep.c]
Fixed bug which causes SEGV on Solaris x86.
Fri Jan 17 18:32:27 1997 Frans van Dorsselaer <dorssel@rulhmpc49.LeidenUniv.nl>
* [controls/edit.c]
Implemented WM_UNDO, WM_CONTEXTMENU (temporary using WM_RBUTTONUP),
WM_COMMAND, WM_INITPOPUPMENU, WM_SYSKEYDOWN.
Fixed EM_SETSEL and some minor bugs (features).
Hence: fully functional undo and a win95 menu with the right mouse
button.
* [include/resources.h] [resources/TODO] [resources/sysres_??.rc]
Added a context menu for the edit control.
Translations, please ...
Fri Jan 17 08:29:52 1997 David Faure <david.faure@ifhamy.insa-lyon.fr>
* [windows/event.c]
Move EVENT_ToAscii to windows/keyboard.c (where name ToAscii)
Fixed Keypad keys 0-9 and . in EVENT_event_to_vkey.
Added 3-state handling of toggle keys (CapsLock, NumLock) in order
to make them work with any X server.
Toggle keys now generate WM_KEYDOWN and WM_KEYUP on each pressing.
* [include/keyboard.h]
Totally replaced the file (formerly containing the vkcase definitions)
by the declaration of 'extern' variables contained by event.c and used
by keyboard.c
* [windows/keyboard.c]
Started to rewrite VkKeyScan and MapVirtualKey, to make them use the
table keyc2vkey or X functions only.
ToAscii : added keypad 0-9 and . special case.
Changed toggle keys active mask from 0x80 to 0x1.
* [misc/keyboard.c]
File deleted. Contents moved to windows/keyboard.c.
* [misc/main.c]
Added putenv XKB_DISABLE to disable XKB extension (which, when
present, causes AltGr to change keyboard group instead of being a
modifier).
Tue Jan 14 22:56:43 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [windows/event.c]
Do not assume NumLockMask is Mod2Mask, but compute it by scanning
output of XGetModifierMapping for XK_Num_Lock.
Tue Jan 14 15:49:49 1997 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [loader/pe_*.c] [include/peexe.h] [include/resource32.h]
[debugger/*.c]
General clean up.
Changed defines/structures to match Windows NT SDK.
* [loader/main.c]
Don't crash on empty command-line.
* [windows/winpos.c]
winpos.c made win32 clean.
* [misc/ntdll.c]
Some string conversion additions.
* [files/file.c]
GetFileAttributes/GetTempFileName fixed.
* [misc/ver.c]
VerInstallFile implemented.
Mon Jan 13 15:03:11 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
* [tools/build.c]: Use PREFIX also in stabs messages.
Mon Jan 13 10:40:33 1997 John Harvey <john@division.co.uk>
* [graphics/win16drv/*] [include/win16drv.h]
Many fixes and some new features.
* [graphics/x11drv/font.c] [graphics/x11drv/init.c]
[include/x11drv.h] [objects/font.c]
GetTextMetrics() moved to graphics driver.
* [if1632/gdi.spec] [misc/fontengine.c] [misc/Makefile.in]
New dummy EngineEnumerateFont, EngineRealizeFont functions.
* [include/windows.h]
TEXTFORM16 and FONTINFO16 structure definitions moved here from
include/win16drv.h
1997-01-20 20:43:45 +01:00
|
|
|
*/
|
1997-02-15 15:29:56 +01:00
|
|
|
|
1999-01-31 10:24:44 +01:00
|
|
|
/***********************************************************************
|
2001-06-19 20:20:47 +02:00
|
|
|
* RtlInitializeResource (NTDLL.@)
|
1999-01-31 10:24:44 +01:00
|
|
|
*
|
|
|
|
* xxxResource() functions implement multiple-reader-single-writer lock.
|
|
|
|
* The code is based on information published in WDJ January 1999 issue.
|
|
|
|
*/
|
|
|
|
void WINAPI RtlInitializeResource(LPRTL_RWLOCK rwl)
|
|
|
|
{
|
|
|
|
if( rwl )
|
|
|
|
{
|
|
|
|
rwl->iNumberActive = 0;
|
|
|
|
rwl->uExclusiveWaiters = 0;
|
|
|
|
rwl->uSharedWaiters = 0;
|
|
|
|
rwl->hOwningThreadId = 0;
|
|
|
|
rwl->dwTimeoutBoost = 0; /* no info on this one, default value is 0 */
|
2000-09-29 02:31:57 +02:00
|
|
|
RtlInitializeCriticalSection( &rwl->rtlCS );
|
2000-07-29 23:56:59 +02:00
|
|
|
NtCreateSemaphore( &rwl->hExclusiveReleaseSemaphore, 0, NULL, 0, 65535 );
|
|
|
|
NtCreateSemaphore( &rwl->hSharedReleaseSemaphore, 0, NULL, 0, 65535 );
|
1999-01-31 10:24:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-06-19 20:20:47 +02:00
|
|
|
* RtlDeleteResource (NTDLL.@)
|
1999-01-31 10:24:44 +01:00
|
|
|
*/
|
|
|
|
void WINAPI RtlDeleteResource(LPRTL_RWLOCK rwl)
|
|
|
|
{
|
|
|
|
if( rwl )
|
|
|
|
{
|
2000-09-29 02:31:57 +02:00
|
|
|
RtlEnterCriticalSection( &rwl->rtlCS );
|
1999-01-31 10:24:44 +01:00
|
|
|
if( rwl->iNumberActive || rwl->uExclusiveWaiters || rwl->uSharedWaiters )
|
1999-05-23 12:25:25 +02:00
|
|
|
MESSAGE("Deleting active MRSW lock (%p), expect failure\n", rwl );
|
1999-01-31 10:24:44 +01:00
|
|
|
rwl->hOwningThreadId = 0;
|
|
|
|
rwl->uExclusiveWaiters = rwl->uSharedWaiters = 0;
|
|
|
|
rwl->iNumberActive = 0;
|
2000-07-29 23:56:59 +02:00
|
|
|
NtClose( rwl->hExclusiveReleaseSemaphore );
|
|
|
|
NtClose( rwl->hSharedReleaseSemaphore );
|
2000-09-29 02:31:57 +02:00
|
|
|
RtlLeaveCriticalSection( &rwl->rtlCS );
|
|
|
|
RtlDeleteCriticalSection( &rwl->rtlCS );
|
1999-01-31 10:24:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-06-19 20:20:47 +02:00
|
|
|
* RtlAcquireResourceExclusive (NTDLL.@)
|
1999-01-31 10:24:44 +01:00
|
|
|
*/
|
|
|
|
BYTE WINAPI RtlAcquireResourceExclusive(LPRTL_RWLOCK rwl, BYTE fWait)
|
|
|
|
{
|
|
|
|
BYTE retVal = 0;
|
|
|
|
if( !rwl ) return 0;
|
|
|
|
|
|
|
|
start:
|
2000-09-29 02:31:57 +02:00
|
|
|
RtlEnterCriticalSection( &rwl->rtlCS );
|
1999-01-31 10:24:44 +01:00
|
|
|
if( rwl->iNumberActive == 0 ) /* lock is free */
|
|
|
|
{
|
|
|
|
rwl->iNumberActive = -1;
|
|
|
|
retVal = 1;
|
|
|
|
}
|
|
|
|
else if( rwl->iNumberActive < 0 ) /* exclusive lock in progress */
|
|
|
|
{
|
2002-07-31 21:26:03 +02:00
|
|
|
if( rwl->hOwningThreadId == (HANDLE)GetCurrentThreadId() )
|
1999-01-31 10:24:44 +01:00
|
|
|
{
|
|
|
|
retVal = 1;
|
|
|
|
rwl->iNumberActive--;
|
|
|
|
goto done;
|
|
|
|
}
|
|
|
|
wait:
|
|
|
|
if( fWait )
|
|
|
|
{
|
|
|
|
rwl->uExclusiveWaiters++;
|
|
|
|
|
2000-09-29 02:31:57 +02:00
|
|
|
RtlLeaveCriticalSection( &rwl->rtlCS );
|
1999-02-26 12:11:13 +01:00
|
|
|
if( WaitForSingleObject( rwl->hExclusiveReleaseSemaphore, INFINITE ) == WAIT_FAILED )
|
1999-01-31 10:24:44 +01:00
|
|
|
goto done;
|
|
|
|
goto start; /* restart the acquisition to avoid deadlocks */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else /* one or more shared locks are in progress */
|
|
|
|
if( fWait )
|
|
|
|
goto wait;
|
2002-06-01 01:06:46 +02:00
|
|
|
|
1999-01-31 10:24:44 +01:00
|
|
|
if( retVal == 1 )
|
2002-07-31 21:26:03 +02:00
|
|
|
rwl->hOwningThreadId = (HANDLE)GetCurrentThreadId();
|
1999-01-31 10:24:44 +01:00
|
|
|
done:
|
2000-09-29 02:31:57 +02:00
|
|
|
RtlLeaveCriticalSection( &rwl->rtlCS );
|
1999-01-31 10:24:44 +01:00
|
|
|
return retVal;
|
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-06-19 20:20:47 +02:00
|
|
|
* RtlAcquireResourceShared (NTDLL.@)
|
1999-01-31 10:24:44 +01:00
|
|
|
*/
|
|
|
|
BYTE WINAPI RtlAcquireResourceShared(LPRTL_RWLOCK rwl, BYTE fWait)
|
|
|
|
{
|
|
|
|
DWORD dwWait = WAIT_FAILED;
|
|
|
|
BYTE retVal = 0;
|
|
|
|
if( !rwl ) return 0;
|
|
|
|
|
|
|
|
start:
|
2000-09-29 02:31:57 +02:00
|
|
|
RtlEnterCriticalSection( &rwl->rtlCS );
|
1999-01-31 10:24:44 +01:00
|
|
|
if( rwl->iNumberActive < 0 )
|
|
|
|
{
|
2002-07-31 21:26:03 +02:00
|
|
|
if( rwl->hOwningThreadId == (HANDLE)GetCurrentThreadId() )
|
1999-01-31 10:24:44 +01:00
|
|
|
{
|
|
|
|
rwl->iNumberActive--;
|
|
|
|
retVal = 1;
|
|
|
|
goto done;
|
|
|
|
}
|
2002-06-01 01:06:46 +02:00
|
|
|
|
1999-01-31 10:24:44 +01:00
|
|
|
if( fWait )
|
|
|
|
{
|
|
|
|
rwl->uSharedWaiters++;
|
2000-09-29 02:31:57 +02:00
|
|
|
RtlLeaveCriticalSection( &rwl->rtlCS );
|
1999-02-26 12:11:13 +01:00
|
|
|
if( (dwWait = WaitForSingleObject( rwl->hSharedReleaseSemaphore, INFINITE )) == WAIT_FAILED )
|
1999-01-31 10:24:44 +01:00
|
|
|
goto done;
|
|
|
|
goto start;
|
|
|
|
}
|
|
|
|
}
|
2002-06-01 01:06:46 +02:00
|
|
|
else
|
1999-01-31 10:24:44 +01:00
|
|
|
{
|
|
|
|
if( dwWait != WAIT_OBJECT_0 ) /* otherwise RtlReleaseResource() has already done it */
|
|
|
|
rwl->iNumberActive++;
|
|
|
|
retVal = 1;
|
|
|
|
}
|
|
|
|
done:
|
2000-09-29 02:31:57 +02:00
|
|
|
RtlLeaveCriticalSection( &rwl->rtlCS );
|
1999-01-31 10:24:44 +01:00
|
|
|
return retVal;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-06-19 20:20:47 +02:00
|
|
|
* RtlReleaseResource (NTDLL.@)
|
1999-01-31 10:24:44 +01:00
|
|
|
*/
|
|
|
|
void WINAPI RtlReleaseResource(LPRTL_RWLOCK rwl)
|
|
|
|
{
|
2000-09-29 02:31:57 +02:00
|
|
|
RtlEnterCriticalSection( &rwl->rtlCS );
|
1999-01-31 10:24:44 +01:00
|
|
|
|
|
|
|
if( rwl->iNumberActive > 0 ) /* have one or more readers */
|
|
|
|
{
|
|
|
|
if( --rwl->iNumberActive == 0 )
|
|
|
|
{
|
|
|
|
if( rwl->uExclusiveWaiters )
|
|
|
|
{
|
|
|
|
wake_exclusive:
|
|
|
|
rwl->uExclusiveWaiters--;
|
2000-07-29 23:56:59 +02:00
|
|
|
NtReleaseSemaphore( rwl->hExclusiveReleaseSemaphore, 1, NULL );
|
1999-01-31 10:24:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2002-06-01 01:06:46 +02:00
|
|
|
else
|
1999-01-31 10:24:44 +01:00
|
|
|
if( rwl->iNumberActive < 0 ) /* have a writer, possibly recursive */
|
|
|
|
{
|
|
|
|
if( ++rwl->iNumberActive == 0 )
|
|
|
|
{
|
|
|
|
rwl->hOwningThreadId = 0;
|
|
|
|
if( rwl->uExclusiveWaiters )
|
|
|
|
goto wake_exclusive;
|
|
|
|
else
|
|
|
|
if( rwl->uSharedWaiters )
|
|
|
|
{
|
1999-02-26 12:11:13 +01:00
|
|
|
UINT n = rwl->uSharedWaiters;
|
1999-01-31 10:24:44 +01:00
|
|
|
rwl->iNumberActive = rwl->uSharedWaiters; /* prevent new writers from joining until
|
|
|
|
* all queued readers have done their thing */
|
|
|
|
rwl->uSharedWaiters = 0;
|
2000-07-29 23:56:59 +02:00
|
|
|
NtReleaseSemaphore( rwl->hSharedReleaseSemaphore, n, NULL );
|
1999-01-31 10:24:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2000-09-29 02:31:57 +02:00
|
|
|
RtlLeaveCriticalSection( &rwl->rtlCS );
|
1999-01-31 10:24:44 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
2001-06-19 20:20:47 +02:00
|
|
|
* RtlDumpResource (NTDLL.@)
|
1999-01-31 10:24:44 +01:00
|
|
|
*/
|
|
|
|
void WINAPI RtlDumpResource(LPRTL_RWLOCK rwl)
|
|
|
|
{
|
|
|
|
if( rwl )
|
|
|
|
{
|
2002-06-01 01:06:46 +02:00
|
|
|
MESSAGE("RtlDumpResource(%p):\n\tactive count = %i\n\twaiting readers = %i\n\twaiting writers = %i\n",
|
1999-01-31 10:24:44 +01:00
|
|
|
rwl, rwl->iNumberActive, rwl->uSharedWaiters, rwl->uExclusiveWaiters );
|
|
|
|
if( rwl->iNumberActive )
|
2002-11-21 04:45:01 +01:00
|
|
|
MESSAGE("\towner thread = %p\n", rwl->hOwningThreadId );
|
1999-01-31 10:24:44 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1999-03-09 18:47:51 +01:00
|
|
|
/*
|
|
|
|
* misc functions
|
|
|
|
*/
|
1999-02-19 17:29:05 +01:00
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* DbgPrint [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
2000-07-29 23:56:59 +02:00
|
|
|
void WINAPIV DbgPrint(LPCSTR fmt, ...)
|
|
|
|
{
|
|
|
|
char buf[512];
|
1999-07-04 13:05:57 +02:00
|
|
|
va_list args;
|
|
|
|
|
|
|
|
va_start(args, fmt);
|
2000-07-29 23:56:59 +02:00
|
|
|
vsprintf(buf,fmt, args);
|
2002-06-01 01:06:46 +02:00
|
|
|
va_end(args);
|
1999-02-19 17:29:05 +01:00
|
|
|
|
1999-05-23 12:25:25 +02:00
|
|
|
MESSAGE("DbgPrint says: %s",buf);
|
1999-02-19 17:29:05 +01:00
|
|
|
/* hmm, raise exception? */
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlAcquirePebLock [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
2000-12-11 04:41:19 +01:00
|
|
|
VOID WINAPI RtlAcquirePebLock(void)
|
|
|
|
{
|
|
|
|
RtlEnterCriticalSection( &peb_lock );
|
1999-02-19 17:29:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlReleasePebLock [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
2000-12-11 04:41:19 +01:00
|
|
|
VOID WINAPI RtlReleasePebLock(void)
|
|
|
|
{
|
|
|
|
RtlLeaveCriticalSection( &peb_lock );
|
1999-02-19 17:29:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlSetEnvironmentVariable [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
|
|
|
DWORD WINAPI RtlSetEnvironmentVariable(DWORD x1,PUNICODE_STRING key,PUNICODE_STRING val) {
|
1999-05-23 12:25:25 +02:00
|
|
|
FIXME("(0x%08lx,%s,%s),stub!\n",x1,debugstr_w(key->Buffer),debugstr_w(val->Buffer));
|
1999-02-19 17:29:05 +01:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlNewSecurityObject [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
|
|
|
DWORD WINAPI RtlNewSecurityObject(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5,DWORD x6) {
|
1999-05-23 12:25:25 +02:00
|
|
|
FIXME("(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx),stub!\n",x1,x2,x3,x4,x5,x6);
|
1999-02-19 17:29:05 +01:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlDeleteSecurityObject [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
|
|
|
DWORD WINAPI RtlDeleteSecurityObject(DWORD x1) {
|
1999-05-23 12:25:25 +02:00
|
|
|
FIXME("(0x%08lx),stub!\n",x1);
|
1999-02-19 17:29:05 +01:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
2001-06-19 20:20:47 +02:00
|
|
|
* RtlNormalizeProcessParams [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
|
|
|
LPVOID WINAPI RtlNormalizeProcessParams(LPVOID x)
|
|
|
|
{
|
1999-05-23 12:25:25 +02:00
|
|
|
FIXME("(%p), stub\n",x);
|
1999-02-19 17:29:05 +01:00
|
|
|
return x;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
2001-06-19 20:20:47 +02:00
|
|
|
* RtlGetNtProductType [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
|
|
|
BOOLEAN WINAPI RtlGetNtProductType(LPDWORD type)
|
|
|
|
{
|
1999-05-23 12:25:25 +02:00
|
|
|
FIXME("(%p): stub\n", type);
|
1999-02-19 17:29:05 +01:00
|
|
|
*type=3; /* dunno. 1 for client, 3 for server? */
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
2001-07-02 21:59:40 +02:00
|
|
|
* _chkstk [NTDLL.@]
|
2001-06-28 20:04:41 +02:00
|
|
|
*
|
1999-02-19 17:29:05 +01:00
|
|
|
* Glorified "enter xxxx".
|
|
|
|
*/
|
1999-11-14 00:54:04 +01:00
|
|
|
void WINAPI NTDLL_chkstk( CONTEXT86 *context )
|
1999-02-19 17:29:05 +01:00
|
|
|
{
|
2000-09-26 01:53:07 +02:00
|
|
|
context->Esp -= context->Eax;
|
1999-02-19 17:29:05 +01:00
|
|
|
}
|
2001-06-28 20:04:41 +02:00
|
|
|
|
|
|
|
/**************************************************************************
|
2001-07-02 21:59:40 +02:00
|
|
|
* _alloca_probe [NTDLL.@]
|
2001-06-28 20:04:41 +02:00
|
|
|
*
|
|
|
|
* Glorified "enter xxxx".
|
|
|
|
*/
|
1999-11-14 00:54:04 +01:00
|
|
|
void WINAPI NTDLL_alloca_probe( CONTEXT86 *context )
|
1999-02-19 17:29:05 +01:00
|
|
|
{
|
2000-09-26 01:53:07 +02:00
|
|
|
context->Esp -= context->Eax;
|
1999-02-19 17:29:05 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/**************************************************************************
|
2001-06-19 20:20:47 +02:00
|
|
|
* RtlDosPathNameToNtPathName_U [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*
|
2002-11-15 02:00:08 +01:00
|
|
|
* szwDosPath: a fully qualified DOS path name
|
|
|
|
* ntpath: pointer to a UNICODE_STRING to hold the converted
|
|
|
|
* path name
|
|
|
|
*
|
|
|
|
* FIXME: Should we not allocate the ntpath buffer under some
|
|
|
|
* circumstances?
|
|
|
|
* Are the conversions static? (always prepend '\??\' ?)
|
|
|
|
* Not really sure about the last two arguments.
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
|
|
|
BOOLEAN WINAPI RtlDosPathNameToNtPathName_U(
|
2002-11-15 02:00:08 +01:00
|
|
|
LPWSTR szwDosPath,PUNICODE_STRING ntpath,
|
|
|
|
DWORD x2,DWORD x3)
|
1999-02-19 17:29:05 +01:00
|
|
|
{
|
2002-11-15 02:00:08 +01:00
|
|
|
ULONG length;
|
|
|
|
UNICODE_STRING pathprefix;
|
|
|
|
WCHAR szPrefix[] = { '\\', '?', '?', '\\', 0 };
|
|
|
|
|
|
|
|
FIXME("(%s,%p,%08lx,%08lx) partial stub\n",
|
|
|
|
debugstr_w(szwDosPath),ntpath,x2,x3);
|
|
|
|
|
|
|
|
if ( !szwDosPath )
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
if ( !szwDosPath[0] )
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
if ( szwDosPath[1]!= ':' )
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
length = strlenW(szwDosPath) * sizeof (WCHAR) + sizeof szPrefix;
|
|
|
|
|
2003-03-15 00:16:46 +01:00
|
|
|
ntpath->Buffer = RtlAllocateHeap(ntdll_get_process_heap(), 0, length);
|
2002-11-15 02:00:08 +01:00
|
|
|
ntpath->Length = 0;
|
|
|
|
ntpath->MaximumLength = length;
|
|
|
|
|
|
|
|
if ( !ntpath->Buffer )
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
RtlInitUnicodeString( &pathprefix, szPrefix );
|
|
|
|
RtlCopyUnicodeString( ntpath, &pathprefix );
|
|
|
|
RtlAppendUnicodeToString( ntpath, szwDosPath );
|
|
|
|
|
2000-09-29 02:31:57 +02:00
|
|
|
return TRUE;
|
1999-02-19 17:29:05 +01:00
|
|
|
}
|
|
|
|
|
2000-07-29 23:56:59 +02:00
|
|
|
|
1999-02-19 17:29:05 +01:00
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlCreateEnvironment [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
|
|
|
DWORD WINAPI RtlCreateEnvironment(DWORD x1,DWORD x2) {
|
1999-05-23 12:25:25 +02:00
|
|
|
FIXME("(0x%08lx,0x%08lx),stub!\n",x1,x2);
|
1999-02-19 17:29:05 +01:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlDestroyEnvironment [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
|
|
|
DWORD WINAPI RtlDestroyEnvironment(DWORD x) {
|
1999-05-23 12:25:25 +02:00
|
|
|
FIXME("(0x%08lx),stub!\n",x);
|
1999-02-19 17:29:05 +01:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlQueryEnvironmentVariable_U [NTDLL.@]
|
1999-02-19 17:29:05 +01:00
|
|
|
*/
|
|
|
|
DWORD WINAPI RtlQueryEnvironmentVariable_U(DWORD x1,PUNICODE_STRING key,PUNICODE_STRING val) {
|
1999-05-23 12:25:25 +02:00
|
|
|
FIXME("(0x%08lx,%s,%p),stub!\n",x1,debugstr_w(key->Buffer),val);
|
1999-02-19 17:29:05 +01:00
|
|
|
return 0;
|
|
|
|
}
|
- implementation of RtlReg* (read access), RtlEvent*, RtlSemaphore*,
NtAllocateLocallyUniqueId
- implementation or stubs for NtAccessCheck, NtSetSecurityObject,
RtlClearBits, RtlEqualPrefixSid, RtlFindClearBits,
RtlFormatCurrentUserKeyPath, RtlGetControlSecurityDescriptor,
RtlIdentifierAuthoritySid, RtlImpersonateSelf, RtlInitializeBitMap,
RtlInitializeGenericTable, RtlMakeSelfRelativeSD,
RtlPrefixUnicodeString, RtlSetBits, RtlUnicodeToMultiByteN,
RtlUpcaseUnicodeStringToOemString, RtlUpcaseUnicodeToOemN,
RtlValidSid, RtlxUnicodeStringToOemSize
- corrected most RtlString* functions, added documentation
- more fixes and partial implementations
2000-01-23 23:35:33 +01:00
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlInitializeGenericTable [NTDLL.@]
|
- implementation of RtlReg* (read access), RtlEvent*, RtlSemaphore*,
NtAllocateLocallyUniqueId
- implementation or stubs for NtAccessCheck, NtSetSecurityObject,
RtlClearBits, RtlEqualPrefixSid, RtlFindClearBits,
RtlFormatCurrentUserKeyPath, RtlGetControlSecurityDescriptor,
RtlIdentifierAuthoritySid, RtlImpersonateSelf, RtlInitializeBitMap,
RtlInitializeGenericTable, RtlMakeSelfRelativeSD,
RtlPrefixUnicodeString, RtlSetBits, RtlUnicodeToMultiByteN,
RtlUpcaseUnicodeStringToOemString, RtlUpcaseUnicodeToOemN,
RtlValidSid, RtlxUnicodeStringToOemSize
- corrected most RtlString* functions, added documentation
- more fixes and partial implementations
2000-01-23 23:35:33 +01:00
|
|
|
*/
|
|
|
|
DWORD WINAPI RtlInitializeGenericTable(void)
|
|
|
|
{
|
|
|
|
FIXME("\n");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2000-02-26 20:35:50 +01:00
|
|
|
/******************************************************************************
|
2002-06-01 01:06:46 +02:00
|
|
|
* RtlCopyMemory [NTDLL]
|
|
|
|
*
|
2000-02-26 20:35:50 +01:00
|
|
|
*/
|
|
|
|
#undef RtlCopyMemory
|
|
|
|
VOID WINAPI RtlCopyMemory( VOID *Destination, CONST VOID *Source, SIZE_T Length )
|
|
|
|
{
|
|
|
|
memcpy(Destination, Source, Length);
|
2002-06-01 01:06:46 +02:00
|
|
|
}
|
2000-02-26 20:35:50 +01:00
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlMoveMemory [NTDLL.@]
|
2000-02-26 20:35:50 +01:00
|
|
|
*/
|
|
|
|
#undef RtlMoveMemory
|
|
|
|
VOID WINAPI RtlMoveMemory( VOID *Destination, CONST VOID *Source, SIZE_T Length )
|
|
|
|
{
|
|
|
|
memmove(Destination, Source, Length);
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlFillMemory [NTDLL.@]
|
2000-02-26 20:35:50 +01:00
|
|
|
*/
|
|
|
|
#undef RtlFillMemory
|
|
|
|
VOID WINAPI RtlFillMemory( VOID *Destination, SIZE_T Length, BYTE Fill )
|
|
|
|
{
|
|
|
|
memset(Destination, Fill, Length);
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlZeroMemory [NTDLL.@]
|
2000-02-26 20:35:50 +01:00
|
|
|
*/
|
|
|
|
#undef RtlZeroMemory
|
|
|
|
VOID WINAPI RtlZeroMemory( VOID *Destination, SIZE_T Length )
|
|
|
|
{
|
|
|
|
memset(Destination, 0, Length);
|
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlCompareMemory [NTDLL.@]
|
2000-02-26 20:35:50 +01:00
|
|
|
*/
|
|
|
|
SIZE_T WINAPI RtlCompareMemory( const VOID *Source1, const VOID *Source2, SIZE_T Length)
|
|
|
|
{
|
|
|
|
int i;
|
|
|
|
for(i=0; (i<Length) && (((LPBYTE)Source1)[i]==((LPBYTE)Source2)[i]); i++);
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
2000-02-20 14:47:28 +01:00
|
|
|
/******************************************************************************
|
2001-06-21 01:03:14 +02:00
|
|
|
* RtlAssert [NTDLL.@]
|
2000-02-20 14:47:28 +01:00
|
|
|
*
|
|
|
|
* Not implemented in non-debug versions.
|
|
|
|
*/
|
|
|
|
void WINAPI RtlAssert(LPVOID x1,LPVOID x2,DWORD x3, DWORD x4)
|
|
|
|
{
|
|
|
|
FIXME("(%p,%p,0x%08lx,0x%08lx),stub\n",x1,x2,x3,x4);
|
|
|
|
}
|
2002-07-28 19:49:26 +02:00
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
* RtlGetNtVersionNumbers [NTDLL.@]
|
|
|
|
*
|
|
|
|
* Introduced in Windows XP (NT5.1)
|
|
|
|
*/
|
|
|
|
void WINAPI RtlGetNtVersionNumbers(LPDWORD major, LPDWORD minor, LPDWORD build)
|
|
|
|
{
|
|
|
|
OSVERSIONINFOEXW versionInfo;
|
|
|
|
versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
|
|
|
|
GetVersionExW((OSVERSIONINFOW*)&versionInfo);
|
|
|
|
|
|
|
|
if (major)
|
|
|
|
{
|
|
|
|
*major = versionInfo.dwMajorVersion;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (minor)
|
|
|
|
{
|
|
|
|
*minor = versionInfo.dwMinorVersion;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (build)
|
|
|
|
{
|
|
|
|
/* FIXME: Does anybody know the real formula? */
|
|
|
|
*build = (0xF0000000 | versionInfo.dwBuildNumber);
|
|
|
|
}
|
|
|
|
}
|
2002-08-16 00:08:40 +02:00
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
* RtlFillMemoryUlong [NTDLL.@]
|
|
|
|
*
|
|
|
|
* Fill memory with a 32 bit (dword) value.
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* lpDest [I] Bitmap pointer
|
|
|
|
* ulCount [I] Number of dwords to write
|
|
|
|
* ulValue [I] Value to fill with
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* Nothing.
|
|
|
|
*/
|
|
|
|
VOID WINAPI RtlFillMemoryUlong(ULONG* lpDest, ULONG ulCount, ULONG ulValue)
|
|
|
|
{
|
|
|
|
TRACE("(%p,%ld,%ld)\n", lpDest, ulCount, ulValue);
|
|
|
|
|
|
|
|
while(ulCount--)
|
|
|
|
*lpDest++ = ulValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*************************************************************************
|
|
|
|
* RtlGetLongestNtPathLength [NTDLL.@]
|
|
|
|
*
|
|
|
|
* Get the longest allowed path length
|
|
|
|
*
|
|
|
|
* PARAMS
|
|
|
|
* None.
|
|
|
|
*
|
|
|
|
* RETURNS
|
|
|
|
* The longest allowed path length (277 characters under Win2k).
|
|
|
|
*/
|
|
|
|
DWORD WINAPI RtlGetLongestNtPathLength(void)
|
|
|
|
{
|
|
|
|
TRACE("()\n");
|
|
|
|
return 277;
|
|
|
|
}
|