- 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
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index f27d663..8cfe831 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -239,7 +239,7 @@
ULONG Flags,
ULONG Size)
{
- FIXME("(0x%08x, 0x%08lx, 0x%08lx) semi stub\n",
+ TRACE("(0x%08x, 0x%08lx, 0x%08lx) semi stub\n",
Heap, Flags, Size);
return HeapAlloc(Heap, Flags, Size);
}
@@ -252,7 +252,7 @@
ULONG Flags,
PVOID Address)
{
- FIXME("(0x%08x, 0x%08lx, %p) semi stub\n",
+ TRACE("(0x%08x, 0x%08lx, %p) semi stub\n",
Heap, Flags, Address);
return HeapFree(Heap, Flags, Address);
}
@@ -265,7 +265,7 @@
BOOLEAN WINAPI RtlDestroyHeap(
HANDLE Heap)
{
- FIXME("(0x%08x) semi stub\n", Heap);
+ TRACE("(0x%08x) semi stub\n", Heap);
return HeapDestroy(Heap);
}
@@ -347,20 +347,72 @@
/**************************************************************************
* RtlNtStatusToDosError [NTDLL.442]
*/
-DWORD WINAPI RtlNtStatusToDosError(DWORD error)
+DWORD WINAPI RtlNtStatusToDosError(DWORD Status)
{
- FIXME("(%lx): map STATUS_ to ERROR_\n",error);
- switch (error)
- { case STATUS_SUCCESS: return ERROR_SUCCESS;
- case STATUS_INVALID_PARAMETER: return ERROR_BAD_ARGUMENTS;
- case STATUS_BUFFER_TOO_SMALL: return ERROR_INSUFFICIENT_BUFFER;
-/* case STATUS_INVALID_SECURITY_DESCR: return ERROR_INVALID_SECURITY_DESCR;*/
- case STATUS_NO_MEMORY: return ERROR_NOT_ENOUGH_MEMORY;
-/* case STATUS_UNKNOWN_REVISION:
- case STATUS_BUFFER_OVERFLOW:*/
+ TRACE("(0x%08lx)\n",Status);
+
+ switch (Status & 0xC0000000)
+ {
+ case 0x00000000:
+ switch (Status)
+ {
+/*00*/ case STATUS_SUCCESS: return ERROR_SUCCESS;
+ }
+ break;
+ case 0x40000000:
+ switch (Status)
+ {
+ }
+ break;
+ case 0x80000000:
+ switch (Status)
+ {
+ case STATUS_GUARD_PAGE_VIOLATION: return STATUS_GUARD_PAGE_VIOLATION;
+ case STATUS_DATATYPE_MISALIGNMENT: return ERROR_NOACCESS;
+ case STATUS_BREAKPOINT: return STATUS_BREAKPOINT;
+ case STATUS_SINGLE_STEP: return STATUS_SINGLE_STEP;
+ case STATUS_BUFFER_OVERFLOW: return ERROR_MORE_DATA;
+ case STATUS_NO_MORE_FILES: return ERROR_NO_MORE_FILES;
+/* case STATUS_NO_INHERITANCE: return ERROR_NO_INHERITANCE;*/
+ case STATUS_PARTIAL_COPY: return ERROR_PARTIAL_COPY;
+/* case STATUS_DEVICE_PAPER_EMPTY: return ERROR_OUT_OF_PAPER;*/
+ case STATUS_DEVICE_POWERED_OFF: return ERROR_NOT_READY;
+ case STATUS_DEVICE_OFF_LINE: return ERROR_NOT_READY;
+ case STATUS_DEVICE_BUSY: return ERROR_BUSY;
+ case STATUS_NO_MORE_EAS: return ERROR_NO_MORE_ITEMS;
+ case STATUS_INVALID_EA_NAME: return ERROR_INVALID_EA_NAME;
+ case STATUS_EA_LIST_INCONSISTENT: return ERROR_EA_LIST_INCONSISTENT;
+ case STATUS_INVALID_EA_FLAG: return ERROR_EA_LIST_INCONSISTENT;
+/* case STATUS_VERIFY_REQUIRED: return ERROR_MEDIA_CHANGED;*/
+ case STATUS_NO_MORE_ENTRIES: return ERROR_NO_MORE_ITEMS;
+/* case STATUS_FILEMARK_DETECTED: return ERROR_FILEMARK_DETECTED;*/
+/* case STATUS_MEDIA_CHANGED: return ERROR_MEDIA_CHANGED;*/
+/* case STATUS_BUS_RESET: return ERROR_BUS_RESET;*/
+/* case STATUS_END_OF_MEDIA: return ERROR_END_OF_MEDIA;*/
+/* case STATUS_BEGINNING_OF_MEDIA: return ERROR_BEGINNING_OF_MEDIA;*/
+/* case STATUS_SETMARK_DETECTED: return ERROR_SETMARK_DETECTED;*/
+/* case STATUS_NO_DATA_DETECTED: return ERROR_NO_DATA_DETECTED;*/
+ case STATUS_ALREADY_DISCONNECTED: return ERROR_ACTIVE_CONNECTIONS;
+ }
+ break;
+ case 0xC0000000:
+ switch (Status)
+ {
+/*01*/ case STATUS_UNSUCCESSFUL: return ERROR_GEN_FAILURE;
+/*08*/ case STATUS_NO_MEMORY: return ERROR_NOT_ENOUGH_MEMORY;
+/*0d*/ case STATUS_INVALID_PARAMETER: return ERROR_INVALID_PARAMETER;
+/*22*/ case STATUS_ACCESS_DENIED: return ERROR_ACCESS_DENIED;
+/*23*/ case STATUS_BUFFER_TOO_SMALL: return ERROR_INSUFFICIENT_BUFFER;
+/*34*/ case STATUS_OBJECT_NAME_NOT_FOUND: return ERROR_FILE_NOT_FOUND;
+/*15c*/ case STATUS_NOT_REGISTRY_FILE: return ERROR_NOT_REGISTRY_FILE;
+/*17c*/ case STATUS_KEY_DELETED: return ERROR_KEY_DELETED;
+/*181*/ case STATUS_CHILD_MUST_BE_VOLATILE: return ERROR_CHILD_MUST_BE_VOLATILE;
+ }
+ break;
}
- FIXME("unknown status (%lx)\n",error);
- return ERROR_SUCCESS;
+ FIXME("unknown status (%lx)\n",Status);
+ return ERROR_MR_MID_NOT_FOUND; /*317*/
+
}
/**************************************************************************
@@ -430,30 +482,6 @@
#endif
}
-/******************************************************************************
- * RtlFormatCurrentUserKeyPath [NTDLL.371]
- */
-DWORD WINAPI RtlFormatCurrentUserKeyPath(PUNICODE_STRING String)
-{
- FIXME("(%p): stub\n",String);
- return 1;
-}
-
-/******************************************************************************
- * RtlOpenCurrentUser [NTDLL]
- */
-DWORD WINAPI RtlOpenCurrentUser(DWORD x1, DWORD *x2)
-{
-/* Note: this is not the correct solution,
- * But this works pretty good on wine and NT4.0 binaries
- */
- if ( x1 == 0x2000000 ) {
- *x2 = HKEY_CURRENT_USER;
- return TRUE;
- }
-
- return FALSE;
-}
/**************************************************************************
* RtlDosPathNameToNtPathName_U [NTDLL.338]
*
@@ -494,3 +522,52 @@
FIXME("(0x%08lx,%s,%p),stub!\n",x1,debugstr_w(key->Buffer),val);
return 0;
}
+/******************************************************************************
+ * RtlInitializeGenericTable [NTDLL]
+ */
+DWORD WINAPI RtlInitializeGenericTable(void)
+{
+ FIXME("\n");
+ return 0;
+}
+
+/******************************************************************************
+ * RtlInitializeBitMap [NTDLL]
+ *
+ */
+NTSTATUS WINAPI RtlInitializeBitMap(DWORD x1,DWORD x2,DWORD x3)
+{
+ FIXME("(0x%08lx,0x%08lx,0x%08lx),stub\n",x1,x2,x3);
+ return 0;
+}
+
+/******************************************************************************
+ * RtlSetBits [NTDLL]
+ *
+ */
+NTSTATUS WINAPI RtlSetBits(DWORD x1,DWORD x2,DWORD x3)
+{
+ FIXME("(0x%08lx,0x%08lx,0x%08lx),stub\n",x1,x2,x3);
+ return 0;
+}
+
+/******************************************************************************
+ * RtlFindClearBits [NTDLL]
+ *
+ */
+NTSTATUS WINAPI RtlFindClearBits(DWORD x1,DWORD x2,DWORD x3)
+{
+ FIXME("(0x%08lx,0x%08lx,0x%08lx),stub\n",x1,x2,x3);
+ return 0;
+}
+
+/******************************************************************************
+ * RtlClearBits [NTDLL]
+ *
+ */
+NTSTATUS WINAPI RtlClearBits(DWORD x1,DWORD x2,DWORD x3)
+{
+ FIXME("(0x%08lx,0x%08lx,0x%08lx),stub\n",x1,x2,x3);
+ return 0;
+}
+