-/* $Id: reg.c,v 1.49 2004/07/03 14:46:39 gvg Exp $
+/* $Id: reg.c,v 1.56 2004/09/13 11:41:26 ekohl Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
/* INCLUDES *****************************************************************/
-#define NTOS_MODE_USER
-#include <ntos.h>
-#include <ddk/ntddk.h>
-#include <rosrtl/string.h>
-#include <ntdll/rtl.h>
-#include <windows.h>
-#include <wchar.h>
-
+#include "advapi32.h"
#define NDEBUG
#include <debug.h>
#define MAX_DEFAULT_HANDLES 6
#define REG_MAX_NAME_SIZE 256
-#define REG_MAX_DATA_SIZE 2048
+#define REG_MAX_DATA_SIZE 2048
/* GLOBALS ******************************************************************/
ANSI_STRING StringA;
LONG ErrorCode = ERROR_SUCCESS;
DWORD NameLength;
- DWORD ClassLength;
+ DWORD ClassLength = 0;
DWORD BufferSize;
DWORD ResultSize;
HANDLE KeyHandle;
ULONG BufferSize;
ULONG ResultSize;
ULONG NameLength;
- ULONG ClassLength;
+ ULONG ClassLength = 0;
HANDLE KeyHandle;
LONG ErrorCode = ERROR_SUCCESS;
NTSTATUS Status;
ULONG NameLength;
ULONG BufferSize;
- ULONG DataLength;
+ ULONG DataLength = 0;
ULONG ResultSize;
HANDLE KeyHandle;
LONG ErrorCode;
ULONG NameLength;
ULONG BufferSize;
- ULONG DataLength;
+ ULONG DataLength = 0;
ULONG ResultSize;
HANDLE KeyHandle;
LONG ErrorCode;
*lpcbValueName = (DWORD)(ValueInfo->Basic.NameLength / sizeof(WCHAR));
lpValueName[*lpcbValueName] = 0;
}
+ *lpcbData = (DWORD)ValueInfo->Full.DataLength;
}
if (ErrorCode == ERROR_SUCCESS && lpType != NULL)
/************************************************************************
* RegGetKeySecurity
*
- * @unimplemented
+ * @implemented
*/
LONG STDCALL
-RegGetKeySecurity (HKEY hKey,
- SECURITY_INFORMATION SecurityInformation,
- PSECURITY_DESCRIPTOR pSecurityDescriptor,
- LPDWORD lpcbSecurityDescriptor)
+RegGetKeySecurity(HKEY hKey,
+ SECURITY_INFORMATION SecurityInformation,
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,
+ LPDWORD lpcbSecurityDescriptor)
{
-#if 0
- HKEY KeyHandle;
+ HANDLE KeyHandle;
LONG ErrorCode;
NTSTATUS Status;
- if (hKey = HKEY_PERFORMANCE_DATA)
+ if (hKey == HKEY_PERFORMANCE_DATA)
{
+ SetLastError(ERROR_INVALID_HANDLE);
return ERROR_INVALID_HANDLE;
}
- Status = MapDefaultKey (&KeyHandle,
- hKey);
+ Status = MapDefaultKey(&KeyHandle,
+ hKey);
if (!NT_SUCCESS(Status))
{
- ErrorCode = RtlNtStatusToDosError (Status);
- SetLastError (ErrorCode);
+ DPRINT("MapDefaultKey() failed (Status %lx)\n", Status);
+ ErrorCode = RtlNtStatusToDosError(Status);
+ SetLastError(ErrorCode);
return ErrorCode;
}
- Status = NtQuerySecurityObject ()
+ Status = NtQuerySecurityObject(KeyHandle,
+ SecurityInformation,
+ pSecurityDescriptor,
+ *lpcbSecurityDescriptor,
+ lpcbSecurityDescriptor);
if (!NT_SUCCESS(Status))
{
- ErrorCode = RtlNtStatusToDosError (Status);
- SetLastError (ErrorCode);
+ DPRINT("NtQuerySecurityObject() failed (Status %lx)\n", Status);
+ ErrorCode = RtlNtStatusToDosError(Status);
+ SetLastError(ErrorCode);
return ErrorCode;
}
return ERROR_SUCCESS;
-#endif
-
- UNIMPLEMENTED;
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return ERROR_CALL_NOT_IMPLEMENTED;
}
if (hKey == HKEY_PERFORMANCE_DATA)
{
+ SetLastError(ERROR_INVALID_HANDLE);
return ERROR_INVALID_HANDLE;
}
KEY_FULL_INFORMATION FullInfoBuffer;
PKEY_FULL_INFORMATION FullInfo;
ULONG FullInfoSize;
- ULONG ClassLength;
+ ULONG ClassLength = 0;
HANDLE KeyHandle;
NTSTATUS Status;
LONG ErrorCode = ERROR_SUCCESS;
ULONG BufferSize;
ULONG ResultSize;
HANDLE KeyHandle;
- ULONG MaxCopy = lpcbData ? *lpcbData : 0;
+ ULONG MaxCopy = lpcbData != NULL && lpData != NULL ? *lpcbData : 0;
DPRINT("hKey 0x%X lpValueName %S lpData 0x%X lpcbData %d\n",
hKey, lpValueName, lpData, lpcbData ? *lpcbData : 0);
if (hKey == HKEY_PERFORMANCE_DATA)
{
+ SetLastError(ERROR_INVALID_HANDLE);
return ERROR_INVALID_HANDLE;
}
NTSTATUS Status;
if (hKey == HKEY_PERFORMANCE_DATA)
- return ERROR_INVALID_HANDLE;
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ return ERROR_INVALID_HANDLE;
+ }
Status = MapDefaultKey (&KeyHandle, hKey);
if (!NT_SUCCESS(Status))