- sorted API by groups
- new stubs:  NtQueryDirectoryFile,  ZwQueryDirectoryFile
- impl.: RtlAllocateHeap, RtlCreateHeap, RtlDestroyHeap, RtlFreeHeap,
  RtlGetDaclSecurityDescriptor, RtlGetSaclSecurityDescriptor
- impl. by Rex Jolliff (rex@lvcablemodem.com): RtlTimeToTimeFields,
  RtlTimeFieldsToTime

diff --git a/dlls/ntdll/om.c b/dlls/ntdll/om.c
new file mode 100644
index 0000000..dc9a3b0
--- /dev/null
+++ b/dlls/ntdll/om.c
@@ -0,0 +1,198 @@
+/*
+ *	Object management functions
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include "debug.h"
+
+#include "ntddk.h"
+
+/* move to somewhere */
+typedef void * POBJDIR_INFORMATION;
+
+/*
+ *	Generic object functions
+ */
+ 
+/******************************************************************************
+ * NtQueryObject [NTDLL.161]
+ */
+NTSTATUS WINAPI NtQueryObject(
+	IN HANDLE ObjectHandle,
+	IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
+	OUT PVOID ObjectInformation,
+	IN ULONG Length,
+	OUT PULONG ResultLength)
+{
+	FIXME(ntdll,"(0x%08x,0x%08x,%p,0x%08lx,%p): stub\n",
+	ObjectHandle, ObjectInformationClass, ObjectInformation, Length, ResultLength);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtQuerySecurityObject	[NTDLL] 
+ */
+NTSTATUS WINAPI NtQuerySecurityObject(DWORD x1,DWORD x2,DWORD x3,DWORD x4,DWORD x5) 
+{
+	FIXME(ntdll,"(0x%08lx,0x%08lx,0x%08lx,0x%08lx,0x%08lx) stub!\n",x1,x2,x3,x4,x5);
+	return 0;
+}
+/******************************************************************************
+ *  NtDuplicateObject		[NTDLL] 
+ */
+NTSTATUS WINAPI NtDuplicateObject(
+	IN HANDLE SourceProcessHandle,
+	IN PHANDLE SourceHandle,
+	IN HANDLE TargetProcessHandle,
+	OUT PHANDLE TargetHandle,
+	IN ACCESS_MASK DesiredAccess,
+	IN BOOLEAN InheritHandle,
+	ULONG Options)
+{
+	FIXME(ntdll,"(0x%08x,%p,0x%08x,%p,0x%08lx,0x%08x,0x%08lx) stub!\n",
+	SourceProcessHandle,SourceHandle,TargetProcessHandle,TargetHandle,
+	DesiredAccess,InheritHandle,Options);
+	*TargetHandle = 0;
+	return 0;
+}
+
+/**************************************************************************
+ *                 NtClose				[NTDLL.65]
+ * FUNCTION: Closes a handle reference to an object
+ * ARGUMENTS:
+ *	Handle	handle to close
+ */
+NTSTATUS WINAPI NtClose(
+	HANDLE Handle) 
+{
+	FIXME(ntdll,"(0x%08x),stub!\n",Handle);
+	return 1;
+}
+
+/******************************************************************************
+ *  NtWaitForSingleObject		[NTDLL] 
+ */
+NTSTATUS WINAPI NtWaitForSingleObject(
+	IN PHANDLE Object,
+	IN BOOLEAN Alertable,
+	IN PLARGE_INTEGER Time)
+{
+	FIXME(ntdll,"(%p,0x%08x,%p),stub!\n",Object,Alertable,Time);
+	return 0;
+}
+
+/*
+ *	Directory functions
+ */
+
+/**************************************************************************
+ * NtOpenDirectoryObject [NTDLL.124]
+ * FUNCTION: Opens a namespace directory object
+ * ARGUMENTS:
+ *  DirectoryHandle	Variable which receives the directory handle
+ *  DesiredAccess	Desired access to the directory
+ *  ObjectAttributes	Structure describing the directory
+ * RETURNS: Status
+ */
+NTSTATUS WINAPI NtOpenDirectoryObject(
+	PHANDLE DirectoryHandle,
+	ACCESS_MASK DesiredAccess,
+	POBJECT_ATTRIBUTES ObjectAttributes)
+{
+    FIXME(ntdll,"(%p,0x%08lx,%p(%s)): stub\n", 
+    DirectoryHandle, DesiredAccess, ObjectAttributes,
+    ObjectAttributes ? debugstr_w(ObjectAttributes->ObjectName->Buffer) : NULL);
+    return 0;
+}
+
+/******************************************************************************
+ *  NtCreateDirectoryObject	[NTDLL] 
+ */
+NTSTATUS WINAPI NtCreateDirectoryObject(
+	PHANDLE DirectoryHandle,
+	ACCESS_MASK DesiredAccess,
+	POBJECT_ATTRIBUTES ObjectAttributes) 
+{
+	FIXME(ntdll,"(%p,0x%08lx,%p(%s)),stub!\n",
+	DirectoryHandle,DesiredAccess,ObjectAttributes,
+	ObjectAttributes ? debugstr_w(ObjectAttributes->ObjectName->Buffer) : NULL);
+	return 0;
+}
+
+/******************************************************************************
+ * NtQueryDirectoryObject [NTDLL.149] 
+ * FUNCTION: Reads information from a namespace directory
+ * ARGUMENTS:
+ *  DirObjInformation	Buffer to hold the data read
+ *  BufferLength	Size of the buffer in bytes
+ *  GetNextIndex	If TRUE then set ObjectIndex to the index of the next object
+ *			If FALSE then set ObjectIndex to the number of objects in the directory
+ *  IgnoreInputIndex	If TRUE start reading at index 0
+ *			If FALSE start reading at the index specified by object index
+ *  ObjectIndex		Zero based index into the directory, interpretation depends on IgnoreInputIndex and GetNextIndex
+ *  DataWritten		Caller supplied storage for the number of bytes written (or NULL)
+ */
+NTSTATUS WINAPI NtQueryDirectoryObject(
+	IN HANDLE DirObjHandle,
+	OUT POBJDIR_INFORMATION DirObjInformation,
+	IN ULONG BufferLength,
+	IN BOOLEAN GetNextIndex,
+	IN BOOLEAN IgnoreInputIndex,
+	IN OUT PULONG ObjectIndex,
+	OUT PULONG DataWritten OPTIONAL)
+{
+	FIXME(ntdll,"(0x%08x,%p,0x%08lx,0x%08x,0x%08x,%p,%p) stub\n",
+		DirObjHandle, DirObjInformation, BufferLength, GetNextIndex,
+		IgnoreInputIndex, ObjectIndex, DataWritten);
+    return 0xc0000000; /* We don't have any. Whatever. (Yet.) */
+}
+
+/*
+ *	Link objects
+ */
+ 
+/******************************************************************************
+ *  NtOpenSymbolicLinkObject	[NTDLL] 
+ */
+NTSTATUS WINAPI NtOpenSymbolicLinkObject(
+	OUT PHANDLE LinkHandle,
+	IN ACCESS_MASK DesiredAccess,
+	IN POBJECT_ATTRIBUTES ObjectAttributes)
+{
+	FIXME(ntdll,"(%p,0x%08lx,%p(%s)) stub\n",
+	LinkHandle, DesiredAccess, ObjectAttributes,
+	ObjectAttributes ? debugstr_w(ObjectAttributes->ObjectName->Buffer) : NULL);
+	return 0;
+}
+
+/******************************************************************************
+ *  NtCreateSymbolicLinkObject	[NTDLL] 
+ */
+NTSTATUS WINAPI NtCreateSymbolicLinkObject(
+	OUT PHANDLE SymbolicLinkHandle,
+	IN ACCESS_MASK DesiredAccess,
+	IN POBJECT_ATTRIBUTES ObjectAttributes,
+	IN PUNICODE_STRING Name)
+{
+	FIXME(ntdll,"(%p,0x%08lx,%p(%s), %p) stub\n",
+	SymbolicLinkHandle, DesiredAccess, ObjectAttributes, 
+	ObjectAttributes ? debugstr_w(ObjectAttributes->ObjectName->Buffer) : NULL,
+	debugstr_w(Name->Buffer));
+	return 0;
+}
+
+/******************************************************************************
+ *  NtQuerySymbolicLinkObject	[NTDLL] 
+ */
+NTSTATUS WINAPI NtQuerySymbolicLinkObject(
+	IN HANDLE LinkHandle,
+	IN OUT PUNICODE_STRING LinkTarget,
+	OUT PULONG ReturnedLength OPTIONAL)
+{
+	FIXME(ntdll,"(0x%08x,%p,%p) stub\n",
+	LinkHandle, debugstr_w(LinkTarget->Buffer), ReturnedLength);
+
+	return 0;
+}
+