mirror of
https://github.com/reactos/wine.git
synced 2025-02-23 14:24:13 +00:00

Sun Jul 12 16:23:36 1998 Alexandre Julliard <julliard@lrc.epfl.ch> * [server/*] [scheduler/client.c] (new files) [scheduler/sysdeps.c] [scheduler/thread.c] [scheduler/process.c] Beginnings of client/server communication for inter-process synchronisation. Sat Jul 11 19:45:45 1998 Ulrich Weigand <weigand@informatik.uni-erlangen.de> * [include/bitmap.h] [objects/bitmap.c] [objects/dib.c] [objects/oembitmap.c] Speed up DIB section handling by using pre-allocated colormap and XImage. Moved DIB section data out of general BITMAPOBJ structure. Bugfix: GetDIBits32 would overwrite one byte beyond bitmap data. * [if1632/shell.spec] [if1632/kernel.spec] [win32/kernel32.c] More verbose error message if ThunkConnect fails. Implemented KERNEL_475. * [files/profile.c] [ole/ole2nls.c] Minor bugfixes. * [if1632/builtin.c] [if1632/kernel.spec] [include/task.h] [loader/ne/module.c] [loader/task.c] Implemented KERNEL.THHOOK. * [if1632/wprocs.spec] [include/process.h] [msdos/dpmi.c] [msdos/vxd.c] Implemented Win32s VxD services (W32S.386). Sat Jul 11 17:52:23 1998 Huw D M Davies <daviesh@abacus.physics.ox.ac.uk> * [graphics/x11drv/xfont.c] [graphics/x11drv/text.c] [include/x11font.h] Improve handling of rotated X11 fonts. Metrics/extents should now be correct. ExtTextOut should behave better (still doesn't handle lpDx). * [graphics/painting.c] DrawFocusRect32: Don't do anything if width or height are zero. Sat Jul 11 15:21:35 1998 Andreas Mohr <100.30936@germany.net> * [files/profile.c] [include/windows.h] The length arguments of *Profile*() need to be treated as UINTxx instead of INTxx. * [graphics/env.c] [graphics/win16drv/init.c] [include/print.h] [misc/printdrv.c] Many printer driver fixes/changes (many thanks go to Huw !). Most printers should work again ;) * [memory/atom.c] Fixed ATOM_AddAtom to store atoms exactly like Windows. * [*/*] Fixed misc compiler warnings. Fri Jul 10 15:58:36 1998 Marcus Meissner <marcus@jet.franken.de> * [files/drive.c] Fixed GetDriveType16 to return DRIVE_REMOTE again. * [loader/pe_image.c][loader/module.c] Look for modules that have the same modulename or the same filename (they sometimes differ). Fixed up fixup_imports, removed one of the loops. * [windows/winpos.c] Added some NULL ptr checks. Needs more. * [graphics/ddraw.c] Some stubs added. * [if1632/snoop.c] Updated, made WINELIB compatible. Fri Jul 10 04:39:56 1998 Douglas Ridgway <ridgway@winehq.com> * [objects/enhmetafile.c] [relay32/gdi32.spec] Small tweaks for documentation system. Thu Jul 9 22:00:18 1998 Eric Kohl <ekohl@abo.rhein-zeitung.de> * [controls/commctrl.c][include/commctrl.h][relay32/comctl32.spec] Fixed GetEffectiveClientRect, CreateToolbarEx and CreateMappedBitmap. Added stub for ShowHideMenuCtl. Added some documentation. * [documentation/common_controls] Added and updated some information. * [controls/toolbar.c][include/toolbar.h] Added string support. * [misc/shell.c][misc/shellord.c][relay32/shell.spec] Changed names of undocumented functions to their real names and fixed the export table. * [controls/imagelist.c][relay32/comctl32.spec] Added stub for ImageList_SetFilter. Fixed some minor bugs and typos. * [objects/font.c][include/windows.h][relay32/gdi32.spec] Added stubs for GetCharacterPlacement32[A/W]. * [objects/region.c][relay32/gdi32.spec] Added stub for UNDOCUMENTED GetRandomRgn. * [controls/commctrl.c][controls/*.c][include/*.h] Added dummy listview, pager, rebar, tooltips, trackbar and treeview control. This keeps some programs from complaining. Thu Jul 9 11:23:58 1998 Rein Klazes <rklazes@casema.net> * [graphics/painting.c] [graphics/*/init.c] [graphics/x11drv/graphics.c] [relay32/gdi32.spec] [if1632/gdi.spec] [include/gdi.h] [include/x11drv.h] Implemented drawing bezier curves: PolyBezier16/32 and PolyBezierTo16/32. * [graphics/x11drv/graphics.c] Improved accuracy of several graphic routines, especially the drawing of pie's. * [include/windows.h] [misc/spy.c] Added 25 window messages related to programs based on MFC and/or OLE. Wed Jul 8 22:00:00 1998 James Juran <jrj120@psu.edu> * [documentation/wine.man] Updated manpage. * [wine.ini] Added section for Win95Look=true (commented out by default). Wed Jul 8 06:23:19 1998 Matthew Becker <mbecker@glasscity.net> * [misc/registry.c] Fixed a crash in RegEnumValue32A when the dwType parameter is NULL. * [programs/regtest/regtest.c] Improved the printing of errors. * [misc/ntdll.c] Added stub for RtlFormatCurrentUserKeyPath. * [win32/console.c] Added stub for ScrollConsoleScreenBuffer. Mon Jul 6 16:41:47 1998 Per Lindström <pelinstr@algonet.se> * [include/windows.h] [relay32/kernel.spec] [win32/newfns.c] Added stubs for SleepEx and TerminateProcess. * [rc/README] Corrected a grammatical error. Mon Jul 3 12:00:00 1998 Juergen Schmied <juergen.schmied@metronet.de> * [misc/shellord.c] Put some TRACE in. * [memory/string.c] Deleted unused variable in lstrcmpi32A. * [include/windows.h][memory/string.c] Added functions WideCharToLocal32 LocalToWideChar32 for OLE-strings * [include/shlobj.h][include/winerror.h][misc/shell.c] [ole/folders.c] Added definition of internal class pidlmgr. Changed definitions of EnumIDList, IShellFolder. Added some OLE error constants. Implemented EnumIDList, IShellFolder, IClassFactory, PidlMgr, SHELL32_DllGetClassObject, SHGetDesktopFolder, SHGetSpecialFolderLocation (half), SHGetPathFromIDList (!!This stuff is not finished yet!!) * [include/windows.h][misc/network][reley32/mpr.spec] Added stubs for WNetConnectionDialog32[A|W|API]. Added struct LPCONNECTDLGSTRUCT32[A|W] and some constants. Added some SetLastError(WN_NO_NETWORK) to the stubs. Fixed bufferhandling in WNetCancelConnection Added stub for MultinetGetErrorText[A|W] * [ole/ole2nls.c] Rewrote GetTimeFormat32A. Fri Jul 3 10:27:30 1998 Michael Poole <poole+@andrew.cmu.edu> * [graphics/ddraw.c] [tsx11/X11_calls] Implement IDirectDrawPalette_GetEntries. Use CopyColormapAndFree to avoid erasing previously-set palette entries. * [graphics/ddraw.c] [include/ddraw.h] [tools/make_X11wrappers] [tsx11/X11_calls] Provide a preliminary, not-yet-working framework for doing DirectDraw via Xlib or XShm as well as DGA. Tue Jun 30 00:16:09 1998 Marcel Baur <mbaur@g26.ethz.ch> * [ole/nls/*.nls] Added remaining 22 locales (including arabic locales).
652 lines
17 KiB
C
652 lines
17 KiB
C
/*
|
|
* Registry testing program
|
|
*
|
|
* Copyright 1998 Matthew Becker
|
|
*
|
|
* The return codes were generated in an NT40 environment, using lcc-win32
|
|
*
|
|
* NOTES
|
|
* When compiling under lcc-win32, I get three (3) warning, but they all
|
|
* seem to be issues with lcc.
|
|
*
|
|
* If creating a new testing sequence, please try to clean up any
|
|
* registry changes that are made.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <malloc.h>
|
|
#include <windows.h>
|
|
#include <winreg.h>
|
|
#include <winerror.h>
|
|
#include <winnt.h>
|
|
|
|
/* True this when security is implemented */
|
|
#define CHECK_SAM FALSE
|
|
|
|
#define ERR(s,d) fprintf(stderr, "%s:#%d(Status=%ld)\n", __FUNCTION__,s,d)
|
|
|
|
/*
|
|
* NOTES: These individual routines are listed in alphabetical order.
|
|
*
|
|
* They are meant to test error conditions. Success conditions are
|
|
* tested in the sequences found at the end.
|
|
*/
|
|
|
|
/******************************************************************************
|
|
* TestCloseKey
|
|
*/
|
|
void TestCloseKey()
|
|
{
|
|
long lSts;
|
|
|
|
lSts = RegCloseKey((HKEY)2);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegCloseKey(HKEY_LOCAL_MACHINE);
|
|
if (lSts != ERROR_SUCCESS) ERR(2,lSts);
|
|
|
|
/* Check twice just for kicks */
|
|
lSts = RegCloseKey(HKEY_LOCAL_MACHINE);
|
|
if (lSts != ERROR_SUCCESS) ERR(3,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestConnectRegistry
|
|
*/
|
|
void TestConnectRegistry()
|
|
{
|
|
long lSts;
|
|
HKEY hkey;
|
|
|
|
lSts = RegConnectRegistry("",(HKEY)2,&hkey);
|
|
if (lSts != ERROR_SUCCESS) ERR(1,lSts);
|
|
|
|
lSts = RegConnectRegistry("",HKEY_LOCAL_MACHINE,&hkey);
|
|
if (lSts != ERROR_SUCCESS) ERR(2,lSts);
|
|
|
|
#if TOO_SLOW
|
|
lSts = RegConnectRegistry("\\\\regtest",HKEY_LOCAL_MACHINE,&hkey);
|
|
if (lSts != ERROR_BAD_NETPATH) ERR(3,lSts);
|
|
#endif
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestCreateKey
|
|
*/
|
|
void TestCreateKey()
|
|
{
|
|
long lSts;
|
|
HKEY hkey;
|
|
|
|
lSts = RegCreateKey((HKEY)2,"",&hkey);
|
|
if (lSts != ERROR_BADKEY) ERR(1,lSts);
|
|
|
|
lSts = RegCreateKey(HKEY_LOCAL_MACHINE,"",&hkey);
|
|
if (lSts != ERROR_SUCCESS) ERR(2,lSts);
|
|
RegCloseKey(hkey);
|
|
|
|
lSts = RegCreateKey(HKEY_LOCAL_MACHINE,"\\asdf",&hkey);
|
|
if (lSts != ERROR_BAD_PATHNAME) ERR(3,lSts);
|
|
|
|
#if 0
|
|
lSts = RegCreateKey(HKEY_LOCAL_MACHINE,"asdf\\",&hkey);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(4,lSts);
|
|
#endif
|
|
|
|
lSts = RegCreateKey(HKEY_LOCAL_MACHINE,"\\asdf\\",&hkey);
|
|
if (lSts != ERROR_BAD_PATHNAME) ERR(5,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestCreateKeyEx
|
|
*/
|
|
void TestCreateKeyEx()
|
|
{
|
|
long lSts;
|
|
HKEY hkey;
|
|
DWORD dwDisp;
|
|
|
|
lSts = RegCreateKeyEx((HKEY)2,"",0,"",0,0,NULL,&hkey,&dwDisp);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegCreateKeyEx(HKEY_LOCAL_MACHINE,"regtest",0,"",0,0,NULL,&hkey,
|
|
&dwDisp);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(2,lSts);
|
|
|
|
lSts = RegCreateKeyEx(HKEY_LOCAL_MACHINE,"regtest",0,"asdf",0,
|
|
KEY_ALL_ACCESS,NULL,&hkey,&dwDisp);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(3,lSts);
|
|
|
|
lSts = RegCreateKeyEx(HKEY_LOCAL_MACHINE,"regtest",0,"",0,
|
|
KEY_ALL_ACCESS,NULL,&hkey,&dwDisp);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(4,lSts);
|
|
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestDeleteKey
|
|
*/
|
|
void TestDeleteKey()
|
|
{
|
|
long lSts;
|
|
|
|
lSts = RegDeleteKey((HKEY)2, "asdf");
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegDeleteKey(HKEY_CURRENT_USER, "asdf");
|
|
if (lSts != ERROR_FILE_NOT_FOUND) ERR(2,lSts);
|
|
|
|
#if CHECK_SAM
|
|
lSts = RegDeleteKey(HKEY_CURRENT_USER, "");
|
|
if (lSts != ERROR_ACCESS_DENIED) ERR(3,lSts);
|
|
#endif
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestDeleteValue
|
|
*/
|
|
void TestDeleteValue()
|
|
{
|
|
long lSts;
|
|
|
|
lSts = RegDeleteValue((HKEY)2, "asdf");
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegDeleteValue(HKEY_CURRENT_USER, "");
|
|
if (lSts != ERROR_FILE_NOT_FOUND) ERR(2,lSts);
|
|
|
|
lSts = RegDeleteValue(HKEY_CURRENT_USER, "asdf");
|
|
if (lSts != ERROR_FILE_NOT_FOUND) ERR(3,lSts);
|
|
|
|
lSts = RegDeleteValue(HKEY_CURRENT_USER, "\\asdf");
|
|
if (lSts != ERROR_FILE_NOT_FOUND) ERR(4,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestEnumKey
|
|
*/
|
|
void TestEnumKey()
|
|
{
|
|
long lSts;
|
|
char *sVal;
|
|
long lVal;
|
|
|
|
lVal = 1;
|
|
sVal = (char *)malloc(lVal * sizeof(char));
|
|
|
|
lSts = RegEnumKey((HKEY)2,3,sVal,lVal);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegEnumKey(HKEY_CURRENT_USER,-1,sVal,lVal);
|
|
if (lSts != ERROR_NO_MORE_ITEMS) ERR(2,lSts);
|
|
|
|
lSts = RegEnumKey(HKEY_CURRENT_USER,0,sVal,lVal);
|
|
if (lSts != ERROR_MORE_DATA) ERR(3,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestEnumKeyEx
|
|
*/
|
|
void TestEnumKeyEx()
|
|
{
|
|
long lSts;
|
|
char *sVal;
|
|
char *sClass;
|
|
unsigned long lLen1;
|
|
unsigned long lLen2;
|
|
FILETIME ft;
|
|
|
|
lLen1 = 1;
|
|
sVal = (char *)malloc(lLen1 * sizeof(char));
|
|
lLen2 = 1;
|
|
sClass = (char *)malloc(lLen2 * sizeof(char));
|
|
|
|
lSts = RegEnumKeyEx((HKEY)2,0,sVal,&lLen1,0,sClass,&lLen2,&ft);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegEnumKeyEx(HKEY_LOCAL_MACHINE,0,sVal,&lLen1,0,sClass,&lLen2,&ft);
|
|
if (lSts != ERROR_MORE_DATA) ERR(2,lSts);
|
|
|
|
lSts = RegEnumKeyEx(HKEY_LOCAL_MACHINE,0,sVal,&lLen1,0,sClass,&lLen2,&ft);
|
|
if (lSts != ERROR_MORE_DATA) ERR(3,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestEnumValue
|
|
*/
|
|
void TestEnumValue()
|
|
{
|
|
long lSts;
|
|
char *sVal;
|
|
unsigned long lVal;
|
|
unsigned long lType;
|
|
unsigned long lLen1;
|
|
char *bVal;
|
|
|
|
lVal = 1;
|
|
sVal = (char *)malloc(lVal * sizeof(char));
|
|
lLen1 = 1;
|
|
bVal = (char *)malloc(lLen1 * sizeof(char));
|
|
|
|
lSts = RegEnumValue((HKEY)2,-1,sVal,&lVal,0,&lType,NULL,&lLen1);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegEnumValue(HKEY_LOCAL_MACHINE,-1,sVal,&lVal,0,&lType,NULL,&lLen1);
|
|
if (lSts != ERROR_NO_MORE_ITEMS) ERR(2,lSts);
|
|
|
|
lSts = RegEnumValue(HKEY_LOCAL_MACHINE,0,sVal,&lVal,0,&lType,NULL,&lLen1);
|
|
if (lSts != ERROR_SUCCESS) ERR(3,lSts);
|
|
|
|
lSts = RegEnumValue(HKEY_LOCAL_MACHINE,0,sVal,&lVal,0,NULL,NULL,&lLen1);
|
|
if (lSts != ERROR_SUCCESS) ERR(4,lSts);
|
|
|
|
lSts = RegEnumValue(HKEY_LOCAL_MACHINE,1,sVal,&lVal,0,&lType,bVal,&lLen1);
|
|
if (lSts != ERROR_NO_MORE_ITEMS) ERR(5,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestFlushKey
|
|
*/
|
|
void TestFlushKey()
|
|
{
|
|
long lSts;
|
|
|
|
lSts = RegFlushKey((HKEY)2);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegFlushKey(HKEY_LOCAL_MACHINE);
|
|
if (lSts != ERROR_SUCCESS) ERR(2,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestGetKeySecurity
|
|
*/
|
|
void TestGetKeySecurity()
|
|
{
|
|
long lSts;
|
|
SECURITY_INFORMATION si;
|
|
SECURITY_DESCRIPTOR sd;
|
|
unsigned long lLen;
|
|
|
|
lLen = sizeof(sd);
|
|
si = 0;
|
|
lSts = RegGetKeySecurity((HKEY)2,si,&sd,&lLen);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegGetKeySecurity(HKEY_LOCAL_MACHINE,si,&sd,&lLen);
|
|
if (lSts != ERROR_INSUFFICIENT_BUFFER) ERR(2,lSts);
|
|
|
|
si = GROUP_SECURITY_INFORMATION;
|
|
lSts = RegGetKeySecurity(HKEY_LOCAL_MACHINE,si,&sd,&lLen);
|
|
if (lSts != ERROR_SUCCESS) ERR(3,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestLoadKey
|
|
*/
|
|
void TestLoadKey()
|
|
{
|
|
long lSts;
|
|
|
|
lSts = RegLoadKey((HKEY)2,"","");
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(1,lSts);
|
|
|
|
lSts = RegLoadKey(HKEY_CURRENT_USER,"","");
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(2,lSts);
|
|
|
|
lSts = RegLoadKey(HKEY_CURRENT_USER,"regtest","");
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(3,lSts);
|
|
|
|
lSts = RegLoadKey(HKEY_CURRENT_USER,"\\regtest","");
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(4,lSts);
|
|
|
|
#if CHECK_SAM
|
|
lSts = RegLoadKey(HKEY_CURRENT_USER,"regtest","regtest.dat");
|
|
if (lSts != ERROR_PRIVILEGE_NOT_HELD) ERR(5,lSts);
|
|
|
|
lSts = RegLoadKey(HKEY_CURRENT_USER,"\\regtest","regtest.dat");
|
|
if (lSts != ERROR_PRIVILEGE_NOT_HELD) ERR(6,lSts);
|
|
#endif
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestNotifyChangeKeyValue
|
|
*/
|
|
void TestNotifyChangeKeyValue()
|
|
{
|
|
long lSts;
|
|
HANDLE hEvent;
|
|
|
|
hEvent = (HANDLE)0;
|
|
|
|
lSts = RegNotifyChangeKeyValue((HKEY)2, TRUE, REG_NOTIFY_CHANGE_NAME, 0, 0);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegNotifyChangeKeyValue(HKEY_CURRENT_USER, TRUE, REG_NOTIFY_CHANGE_NAME, 0, 1);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(2,lSts);
|
|
|
|
hEvent = (HANDLE)HKEY_CURRENT_USER;
|
|
lSts = RegNotifyChangeKeyValue(HKEY_CURRENT_USER, TRUE, REG_NOTIFY_CHANGE_NAME, hEvent, 1);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(3,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestOpenKey
|
|
*/
|
|
void TestOpenKey()
|
|
{
|
|
long lSts;
|
|
HKEY hkey;
|
|
|
|
lSts = RegOpenKey((HKEY)72, "",&hkey);
|
|
if (lSts != ERROR_SUCCESS) ERR(1,lSts);
|
|
RegCloseKey(hkey);
|
|
|
|
lSts = RegOpenKey((HKEY)2, "regtest",&hkey);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(2,lSts);
|
|
|
|
lSts = RegOpenKey(HKEY_CURRENT_USER, "regtest",&hkey);
|
|
if (lSts != ERROR_FILE_NOT_FOUND) ERR(3,lSts);
|
|
|
|
lSts = RegOpenKey(HKEY_CURRENT_USER, "\\regtest",&hkey);
|
|
if (lSts != ERROR_BAD_PATHNAME) ERR(4,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestOpenKeyEx
|
|
*/
|
|
void TestOpenKeyEx()
|
|
{
|
|
long lSts;
|
|
HKEY hkey;
|
|
|
|
lSts = RegOpenKeyEx((HKEY)2,"",0,KEY_ALL_ACCESS,&hkey);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegOpenKeyEx(HKEY_CURRENT_USER,"\\regtest",0,KEY_ALL_ACCESS,&hkey);
|
|
if (lSts != ERROR_BAD_PATHNAME) ERR(2,lSts);
|
|
|
|
lSts = RegOpenKeyEx(HKEY_CURRENT_USER,"regtest",0,0,&hkey);
|
|
if (lSts != ERROR_FILE_NOT_FOUND) ERR(3,lSts);
|
|
|
|
lSts = RegOpenKeyEx(HKEY_CURRENT_USER,"regtest\\",0,0,&hkey);
|
|
if (lSts != ERROR_FILE_NOT_FOUND) ERR(4,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestQueryInfoKey
|
|
*/
|
|
void TestQueryInfoKey()
|
|
{
|
|
long lSts;
|
|
char *sClass;
|
|
unsigned long lClass;
|
|
unsigned long lSubKeys;
|
|
unsigned long lMaxSubLen;
|
|
unsigned long lMaxClassLen;
|
|
unsigned long lValues;
|
|
unsigned long lMaxValNameLen;
|
|
unsigned long lMaxValLen;
|
|
unsigned long lSecDescLen;
|
|
FILETIME ft;
|
|
|
|
lClass = 1;
|
|
sClass = (char *)malloc(lClass * sizeof(char));
|
|
|
|
lSts = RegQueryInfoKey((HKEY)2,sClass,&lClass,0,&lSubKeys,&lMaxSubLen,
|
|
&lMaxClassLen,&lValues,&lMaxValNameLen,&lMaxValLen,
|
|
&lSecDescLen, &ft);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegQueryInfoKey(HKEY_CURRENT_USER,sClass,&lClass,0,&lSubKeys,
|
|
&lMaxSubLen,&lMaxClassLen,&lValues,&lMaxValNameLen,
|
|
&lMaxValLen,&lSecDescLen, &ft);
|
|
if (lSts != ERROR_SUCCESS) ERR(2,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestQueryValue
|
|
*/
|
|
void TestQueryValue()
|
|
{
|
|
long lSts;
|
|
long lLen;
|
|
char *sVal;
|
|
|
|
sVal = (char *)malloc(80 * sizeof(char));
|
|
lLen = strlen(sVal);
|
|
|
|
lSts = RegQueryValue((HKEY)2,"",NULL,&lLen);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegQueryValue(HKEY_CURRENT_USER,"",NULL,&lLen);
|
|
if (lSts != ERROR_SUCCESS) ERR(2,lSts);
|
|
|
|
lSts = RegQueryValue(HKEY_CURRENT_USER,"\\regtest",NULL,&lLen);
|
|
if (lSts != ERROR_BAD_PATHNAME) ERR(3,lSts);
|
|
|
|
lSts = RegQueryValue(HKEY_CURRENT_USER,"",sVal,&lLen);
|
|
if (lSts != ERROR_SUCCESS) ERR(4,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestQueryValueEx
|
|
*/
|
|
void TestQueryValueEx()
|
|
{
|
|
char *sVal;
|
|
long lSts;
|
|
unsigned long lType;
|
|
unsigned long lLen;
|
|
|
|
lLen = 80;
|
|
sVal = (char *)malloc(lLen * sizeof(char));
|
|
|
|
lSts = RegQueryValueEx((HKEY)2,"",0,&lType,sVal,&lLen);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegQueryValueEx(HKEY_CURRENT_USER,"",(LPDWORD)1,&lType,sVal,&lLen);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(2,lSts);
|
|
|
|
lSts = RegQueryValueEx(HKEY_LOCAL_MACHINE,"",0,&lType,sVal,&lLen);
|
|
if (lSts != ERROR_SUCCESS) ERR(3,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestReplaceKey
|
|
*/
|
|
void TestReplaceKey()
|
|
{
|
|
long lSts;
|
|
|
|
lSts = RegReplaceKey((HKEY)2,"","","");
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
#if CHECK_SAM
|
|
lSts = RegReplaceKey(HKEY_LOCAL_MACHINE,"","","");
|
|
if (lSts != ERROR_ACCESS_DENIED) ERR(2,lSts);
|
|
|
|
lSts = RegReplaceKey(HKEY_LOCAL_MACHINE,"Software","","");
|
|
if (lSts != ERROR_ACCESS_DENIED) ERR(3,lSts);
|
|
#endif
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestRestoreKey
|
|
*/
|
|
void TestRestoreKey()
|
|
{
|
|
long lSts;
|
|
|
|
lSts = RegRestoreKey((HKEY)2,"",0);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(1,lSts);
|
|
|
|
lSts = RegRestoreKey(HKEY_LOCAL_MACHINE,"",0);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(2,lSts);
|
|
|
|
lSts = RegRestoreKey(HKEY_LOCAL_MACHINE,"a.a",0);
|
|
if (lSts != ERROR_FILE_NOT_FOUND) ERR(3,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestSaveKey
|
|
*/
|
|
void TestSaveKey()
|
|
{
|
|
long lSts;
|
|
|
|
lSts = RegSaveKey((HKEY)2,"",NULL);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(1,lSts);
|
|
|
|
lSts = RegSaveKey(HKEY_LOCAL_MACHINE,"",NULL);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(2,lSts);
|
|
|
|
#if CHECK_SAM
|
|
lSts = RegSaveKey(HKEY_LOCAL_MACHINE,"a.a",NULL);
|
|
if (lSts != ERROR_PRIVILEGE_NOT_HELD) ERR(3,lSts);
|
|
#endif
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestSetKeySecurity
|
|
*/
|
|
void TestSetKeySecurity()
|
|
{
|
|
long lSts;
|
|
SECURITY_DESCRIPTOR sd;
|
|
|
|
lSts = RegSetKeySecurity((HKEY)2,0,NULL);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(1,lSts);
|
|
|
|
lSts = RegSetKeySecurity(HKEY_LOCAL_MACHINE,0,NULL);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(2,lSts);
|
|
|
|
lSts = RegSetKeySecurity(HKEY_LOCAL_MACHINE,OWNER_SECURITY_INFORMATION,NULL);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(3,lSts);
|
|
|
|
lSts = RegSetKeySecurity(HKEY_LOCAL_MACHINE,OWNER_SECURITY_INFORMATION,&sd);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(4,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestSetValue
|
|
*/
|
|
void TestSetValue()
|
|
{
|
|
#if MAKE_NT_CRASH
|
|
long lSts;
|
|
#endif
|
|
|
|
#if MAKE_NT_CRASH
|
|
lSts = RegSetValue((HKEY)2,"",0,NULL,0);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(1,lSts);
|
|
#endif
|
|
|
|
#if MAKE_NT_CRASH
|
|
lSts = RegSetValue((HKEY)2,"regtest",0,NULL,0);
|
|
if (lSts != ERROR_INVALID_PARAMETER) ERR(2,lSts);
|
|
#endif
|
|
|
|
#if MAKE_NT_CRASH
|
|
lSts = RegSetValue((HKEY)2,"regtest",REG_SZ,NULL,0);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(3,lSts);
|
|
#endif
|
|
|
|
#if MAKE_NT_CRASH
|
|
lSts = RegSetValue(HKEY_LOCAL_MACHINE,"regtest",REG_SZ,NULL,0);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(4,lSts);
|
|
#endif
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestSetValueEx
|
|
*/
|
|
void TestSetValueEx()
|
|
{
|
|
long lSts;
|
|
|
|
lSts = RegSetValueEx((HKEY)2,"",0,0,NULL,0);
|
|
if (lSts != ERROR_INVALID_HANDLE) ERR(1,lSts);
|
|
|
|
lSts = RegSetValueEx(HKEY_LOCAL_MACHINE,"",0,0,NULL,0);
|
|
if (lSts != ERROR_SUCCESS) ERR(2,lSts);
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestUnLoadKey
|
|
*/
|
|
void TestUnLoadKey()
|
|
{
|
|
#if CHECK_SAM
|
|
long lSts;
|
|
#endif
|
|
|
|
#if CHECK_SAM
|
|
lSts = RegUnLoadKey((HKEY)2,"");
|
|
if (lSts != ERROR_PRIVILEGE_NOT_HELD) ERR(1,lSts);
|
|
|
|
lSts = RegUnLoadKey(HKEY_LOCAL_MACHINE,"");
|
|
if (lSts != ERROR_PRIVILEGE_NOT_HELD) ERR(2,lSts);
|
|
|
|
lSts = RegUnLoadKey(HKEY_LOCAL_MACHINE,"\\regtest");
|
|
if (lSts != ERROR_PRIVILEGE_NOT_HELD) ERR(3,lSts);
|
|
#endif
|
|
}
|
|
|
|
/******************************************************************************
|
|
* TestSequence1
|
|
*/
|
|
void TestSequence1()
|
|
{
|
|
HKEY hkey;
|
|
long lSts;
|
|
|
|
lSts = RegCreateKey(HKEY_CURRENT_USER,"regtest",&hkey);
|
|
if (lSts != ERROR_SUCCESS) ERR(1,lSts);
|
|
|
|
/* fprintf(stderr, " hkey=0x%x\n", hkey); */
|
|
|
|
lSts = RegDeleteKey(HKEY_CURRENT_USER, "regtest");
|
|
if (lSts != ERROR_SUCCESS) ERR(2,lSts);
|
|
lSts = RegCloseKey(hkey);
|
|
if (lSts != ERROR_SUCCESS) ERR(3,lSts);
|
|
}
|
|
|
|
|
|
int PASCAL WinMain (HANDLE inst, HANDLE prev, LPSTR cmdline, int show)
|
|
{
|
|
|
|
/* These can be in any order */
|
|
TestCloseKey();
|
|
TestConnectRegistry();
|
|
TestCreateKey();
|
|
TestCreateKeyEx();
|
|
TestDeleteKey();
|
|
TestDeleteValue();
|
|
TestEnumKey();
|
|
TestEnumKeyEx();
|
|
TestEnumValue();
|
|
TestFlushKey();
|
|
TestGetKeySecurity();
|
|
TestLoadKey();
|
|
TestNotifyChangeKeyValue();
|
|
TestOpenKey();
|
|
TestOpenKeyEx();
|
|
TestQueryInfoKey();
|
|
TestQueryValue();
|
|
TestQueryValueEx();
|
|
TestReplaceKey();
|
|
TestRestoreKey();
|
|
TestSaveKey();
|
|
TestSetKeySecurity();
|
|
TestSetValue();
|
|
TestSetValueEx();
|
|
TestUnLoadKey();
|
|
|
|
/* Now we have some sequence testing */
|
|
TestSequence1();
|
|
|
|
return 0;
|
|
}
|
|
|