[PATCH] Bits needed to get hackshield working in RO2.

Chris Wulff crwulff at rochester.rr.com
Mon Feb 16 20:37:20 CST 2009


---
 dlls/ntdll/thread.c                 |    3 +
 dlls/ntoskrnl.exe/ntoskrnl.c        |  547 ++++++++++++++++++++++++++++++++---
 dlls/ntoskrnl.exe/ntoskrnl.exe.spec |   40 ++--
 include/ddk/wdm.h                   |  316 ++++++++++++++++++++-
 4 files changed, 842 insertions(+), 64 deletions(-)

diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
index 56d742d..c8546a3 100644
--- a/dlls/ntdll/thread.c
+++ b/dlls/ntdll/thread.c
@@ -250,6 +250,9 @@ HANDLE thread_init(void)
     size = sizeof(*peb);
     NtAllocateVirtualMemory( NtCurrentProcess(), &addr, 1, &size,
                              MEM_COMMIT | MEM_TOP_DOWN, PAGE_READWRITE );
+
+    memset(addr, 0x00, size);
+
     peb = addr;
 
     peb->NumberOfProcessors = 1;
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 0dc9aaf..0767aff 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -36,10 +36,13 @@
 #include "wine/server.h"
 #include "wine/list.h"
 #include "wine/debug.h"
+#include "wine/exception.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(ntoskrnl);
 WINE_DECLARE_DEBUG_CHANNEL(relay);
+WINE_DECLARE_DEBUG_CHANNEL(seh);
 
+#define PAGE_SIZE 4096
 
 KSYSTEM_TIME KeTickCount = { 0, 0, 0 };
 
@@ -146,7 +149,65 @@ static NTSTATUS process_ioctl( DEVICE_OBJECT *device, ULONG code, void *in_buff,
     NTSTATUS status;
     LARGE_INTEGER count;
 
+#if 1 // DEBUG - CRW
+    SuspendThread(OpenThread(THREAD_ALL_ACCESS,TRUE,GetCurrentThreadId()+3));
+    SuspendThread(OpenThread(THREAD_ALL_ACCESS,TRUE,GetCurrentThreadId()+4));
+
+    PEB *peb = NtCurrentTeb()->Peb;
+    if (NULL == peb->ReadOnlyStaticServerData)
+    {
+
+        peb->ReadOnlyStaticServerData = (VOID**)HeapAlloc( GetProcessHeap(), 0, 4*sizeof(PVOID) );
+        memset(peb->ReadOnlyStaticServerData, 0xCD, 4*sizeof(PVOID));
+        peb->ReadOnlyStaticServerData[1] = (PVOID)HeapAlloc( GetProcessHeap(), 0, 4096 );
+        memset(peb->ReadOnlyStaticServerData[1], 0xcc, 4096);
+        ((VOID**)peb->ReadOnlyStaticServerData[1])[3] = L"Test";
+
+    	TRACE("PEB LdrData=%p ProcessParameters=%p SubSystemData=%p\n",
+            peb->LdrData, peb->ProcessParameters, peb->SubSystemData);
+        TRACE("PEB FastPebLock=%p FastPebLockRoutine=%p, FastPebUnlockRoutine=%p\n",
+            peb->FastPebLock, peb->FastPebLockRoutine, peb->FastPebUnlockRoutine);
+        TRACE("PEB KernelCallbackTable=%p EventLogSection=%p EventLog=%p FreeList=%p\n",
+            peb->KernelCallbackTable, peb->EventLogSection, peb->EventLog, peb->FreeList);
+        TRACE("PEB ReadOnlySharedMemoryBase=%p ReadOnlySharedMemoryHeap=%p\n",
+            peb->ReadOnlySharedMemoryBase, peb->ReadOnlySharedMemoryHeap);
+        TRACE("PEB ReadOnlyStaticServerData=%p AnsiCodePageData=%p OemCodePageData=%p\n",
+            peb->ReadOnlyStaticServerData, peb->AnsiCodePageData, peb->OemCodePageData);
+        TRACE("PEB UnicodeCaseTableData=%p ProcessHeaps=%p GdiSharedHandleTable=%p\n",
+            peb->UnicodeCaseTableData, peb->ProcessHeaps, peb->GdiSharedHandleTable);
+        TRACE("PEB ProcessStarterHelper=%p GdiDCAttributeList=%p LoaderLock=%p TlsExpansionBitmap=%p\n",
+            peb->ProcessStarterHelper, peb->GdiDCAttributeList, peb->LoaderLock, peb->TlsExpansionBitmap);
+
+        peb->SubSystemData = (PVOID)0xAAAAAAAA;
+        peb->FastPebLock = (PVOID)0xAAAABAAA;
+        peb->FastPebLockRoutine = (PVOID)0xAAAACAAA;
+        peb->FastPebUnlockRoutine = (PVOID)0xAAAADAAA;
+        peb->KernelCallbackTable = (PVOID)0xAAAAEAAA;
+        peb->EventLogSection = (PVOID)0xAAAAFAAA;
+        peb->EventLog = (PVOID)0xAAABAAAA;
+        peb->FreeList = (PVOID)0xAAABBAAA;
+        peb->ReadOnlySharedMemoryBase = (PVOID)0xAAABCAAA;
+        peb->ReadOnlySharedMemoryHeap = (PVOID)0xAAABDAAA;
+        peb->AnsiCodePageData = (PVOID)0xAAABEAAA;
+        peb->OemCodePageData = (PVOID)0xAAABFAAA;
+        peb->UnicodeCaseTableData = (PVOID)0xAAACAAAA;
+        peb->ProcessHeaps = (PVOID)0xAAACBAAA;
+        peb->GdiSharedHandleTable = (PVOID)0xAAACCAAA;
+        peb->ProcessStarterHelper = (PVOID)0xAAACDAAA;
+        peb->GdiDCAttributeList = (PVOID)0xAAACEAAA;
+        peb->LoaderLock = (PVOID)0xAAACFAAA;
+    }
+#endif
+
     TRACE( "ioctl %x device %p in_size %u out_size %u\n", code, device, in_size, *out_size );
+    unsigned int i;
+    for (i=0; i<(in_size+3)/4; i++) TRACE("0x%08x ", ((unsigned int*)in_buff)[i]);
+    TRACE("\n");
+
+    if (code == 0xf1200268)
+    {
+    	for (i=0; i<in_size/4; i++) if (0 == ((unsigned int*)in_buff)[i]) ((unsigned int*)in_buff)[i] = 0xcccccccc;
+    }
 
     /* so we can spot things that we should initialize */
     memset( &irp, 0x55, sizeof(irp) );
@@ -178,13 +239,43 @@ static NTSTATUS process_ioctl( DEVICE_OBJECT *device, ULONG code, void *in_buff,
 
     KeQueryTickCount( &count );  /* update the global KeTickCount */
 
-    if (TRACE_ON(relay))
+//    if (TRACE_ON(relay))
         DPRINTF( "%04x:Call driver dispatch %p (device=%p,irp=%p)\n",
                  GetCurrentThreadId(), dispatch, device, &irp );
 
+#if 0
     status = dispatch( device, &irp );
+#else
+    __TRY
+    {
+        status = dispatch( device, &irp );
+	if (irp.IoStatus.Information == 0 && *out_size > 0)
+	{
+		memset(out_buff, 0x00, *out_size);
+		irp.IoStatus.Information = *out_size;//0;
+	}
+    }
+    __EXCEPT_PAGE_FAULT
+    {
+        TRACE_(seh)("ioctl caused an exception\n");
+#if 0
+        irp.IoStatus.u.Status = STATUS_ACCESS_VIOLATION;
+#else
+        status = irp.IoStatus.u.Status = STATUS_SUCCESS;
+	irp.IoStatus.Information = 0;
+#endif
+    }
+    __ENDTRY
+#endif
 
-    if (TRACE_ON(relay))
+ #if 1
+     if ((code == 0xf1200254)||(code == 0xf1200284))
+     {
+    	ResumeThread(OpenThread(THREAD_ALL_ACCESS,TRUE,GetCurrentThreadId()+3));
+	ResumeThread(OpenThread(THREAD_ALL_ACCESS,TRUE,GetCurrentThreadId()+4));
+     }
+ #endif
+//    if (TRACE_ON(relay))
         DPRINTF( "%04x:Ret  driver dispatch %p (device=%p,irp=%p) retval=%08x\n",
                  GetCurrentThreadId(), dispatch, device, &irp, status );
 
@@ -207,7 +298,7 @@ NTSTATUS CDECL wine_ntoskrnl_main_loop( HANDLE stop_event )
     ULONG in_size = 4096, out_size = 0;
     HANDLE handles[2];
 
-    if (!(in_buff = HeapAlloc( GetProcessHeap(), 0, in_size )))
+    if (!(in_buff = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, in_size )))
     {
         ERR( "failed to allocate buffer\n" );
         return STATUS_NO_MEMORY;
@@ -246,13 +337,13 @@ NTSTATUS CDECL wine_ntoskrnl_main_loop( HANDLE stop_event )
         {
         case STATUS_SUCCESS:
             HeapFree( GetProcessHeap(), 0, out_buff );
-            if (out_size) out_buff = HeapAlloc( GetProcessHeap(), 0, out_size );
+            if (out_size) out_buff = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, out_size );
             else out_buff = NULL;
             status = process_ioctl( device, code, in_buff, in_size, out_buff, &out_size );
             break;
         case STATUS_BUFFER_OVERFLOW:
             HeapFree( GetProcessHeap(), 0, in_buff );
-            in_buff = HeapAlloc( GetProcessHeap(), 0, in_size );
+            in_buff = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, in_size );
             /* restart with larger buffer */
             break;
         case STATUS_PENDING:
@@ -346,26 +437,6 @@ void WINAPI IoFreeIrp( IRP *irp )
 
 
 /***********************************************************************
- *           IoAllocateMdl  (NTOSKRNL.EXE.@)
- */
-PMDL WINAPI IoAllocateMdl( PVOID VirtualAddress, ULONG Length, BOOLEAN SecondaryBuffer, BOOLEAN ChargeQuota, PIRP Irp )
-{
-    FIXME( "stub: %p, %u, %i, %i, %p\n", VirtualAddress, Length, SecondaryBuffer, ChargeQuota, Irp );
-    return NULL;
-}
-
-
-/***********************************************************************
- *           IoAllocateWorkItem  (NTOSKRNL.EXE.@)
- */
-PIO_WORKITEM WINAPI IoAllocateWorkItem( PDEVICE_OBJECT DeviceObject )
-{
-    FIXME( "stub: %p\n", DeviceObject );
-    return NULL;
-}
-
-
-/***********************************************************************
  *           IoAttachDeviceToDeviceStack  (NTOSKRNL.EXE.@)
  */
 PDEVICE_OBJECT WINAPI IoAttachDeviceToDeviceStack( DEVICE_OBJECT *source,
@@ -475,6 +546,98 @@ void WINAPI IoDeleteDriver( DRIVER_OBJECT *driver )
 
 
 /***********************************************************************
+ *           IoAllocateMdl   (NTOSKRNL.EXE.@)
+ */
+PMDL WINAPI IoAllocateMdl( PVOID VAddr, ULONG Length,
+                           BOOLEAN SecondaryBuffer, BOOLEAN ChargeQuota,
+                           PIRP Irp )
+{
+    PMDL Mdl = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(MDL) +
+         sizeof(PFN_NUMBER)*ADDRESS_AND_SIZE_TO_SPAN_PAGES(VAddr, Length) );
+    PMDL p;
+
+    TRACE("(%p %u %u %u %p)\n", VAddr, Length, SecondaryBuffer, ChargeQuota, Irp);
+
+    if (NULL == Mdl)
+    {
+        return NULL;
+    }
+
+    Mdl->Next = NULL;
+    Mdl->Size = 0;
+    Mdl->MdlFlags = 0;
+    Mdl->MappedSystemVa = VirtualAlloc( VAddr, Length, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE|PAGE_NOCACHE );
+    Mdl->StartVa = Mdl->MappedSystemVa;
+    Mdl->ByteCount = Length;
+    Mdl->ByteOffset = (ULONG)VAddr - (ULONG)Mdl->MappedSystemVa;
+
+    /* Check if an IRP was given too */
+    if (Irp)
+    {
+        /* Check if it came with a secondary buffer */
+        if (SecondaryBuffer)
+        {
+            /* Insert the MDL at the end */
+            p = Irp->MdlAddress;
+            while (p->Next) p = p->Next;
+            p->Next = Mdl;
+        }
+        else
+        {
+            /* Otherwise, insert it directly */
+            Irp->MdlAddress = Mdl;
+        }
+    }
+ 
+    /* Return the allocated mdl */
+    return Mdl;
+}
+
+/***********************************************************************
+ *           IoFreeMdl   (NTOSKRNL.EXE.@)
+ */
+VOID WINAPI IoFreeMdl( PMDL mdl )
+{
+    TRACE("(%p)\n", mdl);
+
+    HeapFree( GetProcessHeap(), 0, mdl );
+}
+
+/***********************************************************************
+ *           IoAllocateWorkItem   (NTOSKRNL.EXE.@)
+ */
+PIO_WORKITEM WINAPI IoAllocateWorkItem( PDEVICE_OBJECT DeviceObject )
+{
+    PIO_WORKITEM WorkItem = NULL;
+
+    FIXME( "%p\n", DeviceObject );
+
+    // Allocat a dummy object for now
+    WorkItem = HeapAlloc( GetProcessHeap(), 0, 0x400 );
+    
+    memset(WorkItem, 0xCC, 0x400);
+    
+    return WorkItem;
+}
+
+/***********************************************************************
+ *           IoAssignResources	(NTOSKRNL.EXE.@)
+ */
+
+NTSTATUS WINAPI IoAssignResources(
+    PUNICODE_STRING RegistryPath, PUNICODE_STRING DriverClassName,
+    PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT DeviceObject,
+    PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources,
+    PCM_RESOURCE_LIST *AllocatedResources )
+{
+    FIXME( "%p %p %p %p %p %p\n", RegistryPath, DriverClassName,
+           DriverObject, DeviceObject, RequestedResources,
+           AllocatedResources );
+
+    return STATUS_SUCCESS;
+}
+
+/***********************************************************************
  *           IoCreateDevice   (NTOSKRNL.EXE.@)
  */
 NTSTATUS WINAPI IoCreateDevice( DRIVER_OBJECT *driver, ULONG ext_size,
@@ -836,8 +999,9 @@ PVOID WINAPI ExAllocatePoolWithQuota( POOL_TYPE type, SIZE_T size )
 PVOID WINAPI ExAllocatePoolWithTag( POOL_TYPE type, SIZE_T size, ULONG tag )
 {
     /* FIXME: handle page alignment constraints */
-    void *ret = HeapAlloc( GetProcessHeap(), 0, size );
+    void *ret = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, size );
     TRACE( "%lu pool %u -> %p\n", size, type, ret );
+    memset(ret, 0xCC, size);
     return ret;
 }
 
@@ -871,11 +1035,92 @@ void WINAPI ExFreePoolWithTag( void *ptr, ULONG tag )
 
 
 /***********************************************************************
+ *           ExInitializeNPagedLookasideList	(NTOSKRNL.EXE.@)
+ */
+void WINAPI ExInitializeNPagedLookasideList( PNPAGED_LOOKASIDE_LIST Lookaside, PALLOCATE_FUNCTION Allocate, PFREE_FUNCTION Free, ULONG Flags, SIZE_T Size, ULONG Tag, USHORT Depth)
+{
+    FIXME( "%p %p %p %u %lu %u %u\n", Lookaside, Allocate, Free, Flags, Size, Tag, Depth );
+
+    memset(Lookaside, 0xcc, sizeof(NPAGED_LOOKASIDE_LIST));
+}
+
+/***********************************************************************
+ *           ExInitializePagedLookasideList	(NTOSKRNL.EXE.@)
+ */
+void WINAPI ExInitializePagedLookasideList( PPAGED_LOOKASIDE_LIST Lookaside, PALLOCATE_FUNCTION Allocate, PFREE_FUNCTION Free, ULONG Flags, SIZE_T Size, ULONG Tag, USHORT Depth)
+{
+    FIXME( "%p %p %p %u %lu %u %u\n", Lookaside, Allocate, Free, Flags, Size, Tag, Depth );
+
+    memset(Lookaside, 0xcc, sizeof(PAGED_LOOKASIDE_LIST));
+}
+
+/***********************************************************************
+ *           ExInitializeResourceLite	(NTOSKRNL.EXE.@)
+ */
+NTSTATUS WINAPI ExInitializeResourceLite( PERESOURCE Resource )
+{
+    FIXME( "%p\n", Resource );
+
+    return STATUS_SUCCESS;
+}
+
+/***********************************************************************
+ *           ExInitializeZone	(NTOSKRNL.EXE.@)
+ */
+NTSTATUS WINAPI ExInitializeZone( PZONE_HEADER Zone, ULONG BlockSize, PVOID InitialSegment, ULONG InitialSegmentSize )
+{
+    FIXME( "%p %u %p %u\n", Zone, BlockSize, InitialSegment, InitialSegmentSize );
+
+    return STATUS_SUCCESS;
+}
+
+/***********************************************************************
  *           KeInitializeEvent   (NTOSKRNL.EXE.@)
  */
 void WINAPI KeInitializeEvent( PRKEVENT Event, EVENT_TYPE Type, BOOLEAN State )
 {
-    FIXME( "stub: %p %d %d\n", Event, Type, State );
+    TRACE("(%p %d %d)\n", Event, Type, State);
+
+    /* Initialize the dispatcher header */
+    Event->Header.Type = Type;
+    Event->Header.Absolute = 0;
+    Event->Header.Inserted = 0;
+    Event->Header.Size =  sizeof(KEVENT) / sizeof(ULONG);
+    Event->Header.SignalState = State;
+
+    /* CRW - DEBUG */
+    NtCreateEvent((HANDLE*)&Event->Header.Absolute, EVENT_ALL_ACCESS, NULL, FALSE, State);
+}
+
+
+/***********************************************************************
+ *           KeInitializeInterrupt   (NTOSKRNL.EXE.@)
+ */
+void WINAPI KeInitializeInterrupt( PKINTERRUPT Interrupt, PKSERVICE_ROUTINE ServiceRoutine, PVOID ServiceContext, PKSPIN_LOCK SpinLock, ULONG Vector, KIRQL Irql, KIRQL SynchronizeIrql, KINTERRUPT_MODE InterruptMode, BOOLEAN ShareVector, CHAR ProcessorNumber, BOOLEAN FloatingSave )
+{
+    FIXME("%p %p %p %p\n", Interrupt, ServiceRoutine, ServiceContext, SpinLock);
+}
+
+
+/***********************************************************************
+ *           KeInitializeSemaphore   (NTOSKRNL.EXE.@)
+ */
+void WINAPI KeInitializeSemaphore( PRKSEMAPHORE Semaphore, LONG Count, LONG Limit )
+{
+    TRACE("(%p %d %d)\n", Semaphore, Count, Limit);
+
+    /* Initialize the dispatcher header */
+    Semaphore->Header.Type = SemaphoreObject;
+    Semaphore->Header.Absolute = 0;
+    Semaphore->Header.Inserted = 0;
+    Semaphore->Header.Size =  sizeof(KSEMAPHORE) / sizeof(ULONG);
+    Semaphore->Header.SignalState = Count;
+
+    /* Set the semaphore specfic items */
+    Semaphore->Limit = Limit;
+
+    /* CRW - DEBUG */
+    NtCreateSemaphore((HANDLE*)&Semaphore->Header.Absolute, EVENT_ALL_ACCESS, NULL, Count, Limit);
 }
 
 
@@ -884,7 +1129,9 @@ void WINAPI KeInitializeEvent( PRKEVENT Event, EVENT_TYPE Type, BOOLEAN State )
  */
 void WINAPI KeInitializeSpinLock( PKSPIN_LOCK SpinLock )
 {
-    FIXME( "stub: %p\n", SpinLock );
+    TRACE("(%p)\n", SpinLock);
+
+    *SpinLock = 0;
 }
 
 
@@ -893,7 +1140,20 @@ void WINAPI KeInitializeSpinLock( PKSPIN_LOCK SpinLock )
  */
 void WINAPI KeInitializeTimerEx( PKTIMER Timer, TIMER_TYPE Type )
 {
-    FIXME( "stub: %p %d\n", Timer, Type );
+    TRACE("%p %u\n", Timer, Type);
+
+    /* Initialize the dispatcher header */
+    Timer->Header.Type = TimerNotificationObject + Type;
+    Timer->Header.Absolute = 0;
+    Timer->Header.Inserted = 0;
+    Timer->Header.Size =  sizeof(KTIMER) / sizeof(ULONG);
+    Timer->Header.SignalState = 0;
+
+    /* Initalize the timer specific items */
+    Timer->DueTime.QuadPart = 0;
+    InitializeListHead(&Timer->TimerListEntry);
+    Timer->Dpc = NULL;
+    Timer->Period = 0;
 }
 
 
@@ -906,6 +1166,32 @@ void WINAPI KeInitializeTimer( PKTIMER Timer )
 }
 
 
+/***********************************************************************
+ *           KeInsertDeviceQueue	(NTOSKRNL.EXE.@)
+ */
+void WINAPI KeInsertDeviceQueue( PKDEVICE_QUEUE DeviceQueue, PKDEVICE_QUEUE_ENTRY DeviceQueueEntry)
+{
+    FIXME("%p %p\n", DeviceQueue, DeviceQueueEntry);
+}
+
+
+/***********************************************************************
+ *           KeInsertHeadQueue	(NTOSKRNL.EXE.@)
+ */
+void WINAPI KeInsertHeadQueue( PKQUEUE Queue, PLIST_ENTRY Entry)
+{
+    FIXME("%p %p\n", Queue, Entry);
+}
+
+
+/***********************************************************************
+ *           KeInsertByKeyDeviceQueue	(NTOSKRNL.EXE.@)
+ */
+void WINAPI KeInsertByKeyDeviceQueue( PKDEVICE_QUEUE DeviceQueue, PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, ULONG SortKey )
+{
+    FIXME("%p %p %u\n", DeviceQueue, DeviceQueueEntry, SortKey);
+}
+
 /**********************************************************************
  *           KeQueryActiveProcessors   (NTOSKRNL.EXE.@)
  *
@@ -939,6 +1225,63 @@ ULONGLONG WINAPI KeQueryInterruptTime( void )
 }
 
 
+/**********************************************************************
+ *           KeReleaseSemaphore (NTOSKRNL.EXE.@)
+ */
+LONG WINAPI KeReleaseSemaphore( PRKSEMAPHORE Semaphore, KPRIORITY Inc,
+    LONG Adjustment, BOOLEAN Wait )
+{
+    FIXME("(%p %u %u %u) stub!\n", Semaphore, Inc, Adjustment, Wait);
+
+    ULONG Prev = 0;
+    NtReleaseSemaphore((HANDLE*)&Semaphore->Header.Absolute, Inc, &Prev);
+    return Prev;
+}
+
+
+/***********************************************************************
+ *           KeResetEvent (NTOSKRNL.EXE.@)
+ */
+LONG WINAPI KeResetEvent( PRKEVENT Event )
+{
+    FIXME("(%p) stub!\n", Event);
+
+    /* CRW - DEBUG */
+    NtResetEvent(&Event->Header.Absolute, NULL);
+
+    return 0;
+}
+
+
+/***********************************************************************
+ *           KeSetEvent (NTOSKRNL.EXE.@)
+ */
+LONG WINAPI KeSetEvent( PRKEVENT Event, KPRIORITY Increment, BOOLEAN Wait )
+{
+    FIXME("(%p %u %u) stub!\n", Event, Increment, Wait);
+
+    /* CRW - DEBUG */
+    NtSetEvent(&Event->Header.Absolute, NULL);
+
+    return 0;
+}
+
+
+/***********************************************************************
+ *           KeWaitForSingleObject  (NTOSKRNL.EXE.@)
+ */
+NTSTATUS WINAPI KeWaitForSingleObject(PVOID Object, KWAIT_REASON Reason,
+    KPROCESSOR_MODE Mode, BOOLEAN Alertable, PLARGE_INTEGER Timeout)
+{
+    FIXME("(%p %u %u %u %p) stub!\n", Object, Reason, Mode, Alertable,
+        Timeout);
+
+    /* CRW - DEBUG */
+    return NtWaitForSingleObject(&(((DISPATCHER_HEADER*)Object)->Absolute), Alertable, Timeout);
+
+//    return STATUS_NOT_IMPLEMENTED;
+}
+
 /***********************************************************************
  *           KeQuerySystemTime   (NTOSKRNL.EXE.@)
  */
@@ -1026,19 +1369,6 @@ void WINAPI MmResetDriverPaging(PVOID AddrInSection)
 }
 
 
- /***********************************************************************
- *           ObReferenceObjectByHandle    (NTOSKRNL.EXE.@)
- */
-NTSTATUS WINAPI ObReferenceObjectByHandle( HANDLE obj, ACCESS_MASK access,
-                                           POBJECT_TYPE type,
-                                           KPROCESSOR_MODE mode, PVOID* ptr,
-                                           POBJECT_HANDLE_INFORMATION info)
-{
-    FIXME( "stub: %p %x %p %d %p %p\n", obj, access, type, mode, ptr, info);
-    return STATUS_NOT_IMPLEMENTED;
-}
-
-
 /***********************************************************************
  *           ObfDereferenceObject   (NTOSKRNL.EXE.@)
  */
@@ -1054,11 +1384,143 @@ void WINAPI ObfDereferenceObject( VOID *obj )
 
 
 /***********************************************************************
+ *           MmIsDriverVerifying	(NTOSKRNL.EXE.@)
+ */
+ULONG WINAPI MmIsDriverVerifying( struct _DRIVER_OBJECT *DriverObject )
+{
+    FIXME( "%p\n", DriverObject );
+
+    return 0;
+}
+
+/***********************************************************************
+ *           MmMapLockedPagesSpecifyCache	(NTOSKRNL.EXE.@)
+ */
+PVOID WINAPI MmMapLockedPagesSpecifyCache(
+    PMDL  MemoryDescriptorList,
+    KPROCESSOR_MODE  AccessMode,
+    MEMORY_CACHING_TYPE  CacheType,
+    PVOID  BaseAddress,
+    ULONG  BugCheckOnFailure,
+    MM_PAGE_PRIORITY  Priority )
+{
+    FIXME( "%p %u %u %p %u %u", MemoryDescriptorList, AccessMode, CacheType,
+			BaseAddress, BugCheckOnFailure, Priority );
+	
+    return MemoryDescriptorList->MappedSystemVa;
+}
+
+/***********************************************************************
+ *           MmMapLockedPagesSpecifyCache	(NTOSKRNL.EXE.@)
+ */
+PVOID WINAPI   MmMapLockedPagesWithReservedMapping (
+	    PVOID  MappingAddress,
+	    ULONG  PoolTag,
+	    PMDL  MemoryDescriptorList,
+	    MEMORY_CACHING_TYPE  CacheType )
+{
+    FIXME( "%p %u %p %u", MappingAddress, PoolTag, MemoryDescriptorList,
+			CacheType );
+	
+    return MemoryDescriptorList->MappedSystemVa;
+}
+
+/***********************************************************************
+ *           MmProbeAndLockPages	(NTOSKRNL.EXE.@)
+ */
+VOID WINAPI MmProbeAndLockPages( PMDL mdl,
+                                 KPROCESSOR_MODE AccessMode,
+                                 LOCK_OPERATION Operation )
+{
+    FIXME( "(%p %u %u) stub!\n", mdl, AccessMode, Operation );
+
+    mdl->Process = GetCurrentProcess();
+    mdl->MdlFlags |= MDL_PAGES_LOCKED;
+}
+
+
+/***********************************************************************
+ *           MmUnlockPages	(NTOSKRNL.EXE.@)
+ */
+VOID WINAPI MmUnlockPages( PMDL mdl )
+{
+    TRACE( "(%p)\n", mdl );
+
+    mdl->MdlFlags &= ~MDL_PAGES_LOCKED;
+}
+
+/***********************************************************************
+ *           ObReferenceObjectByHandle	(NTOSKRNL.EXE.@)
+ */
+NTSTATUS WINAPI ObReferenceObjectByHandle(
+	    HANDLE  Handle,
+	    ACCESS_MASK  DesiredAccess,
+	    POBJECT_TYPE  ObjectType,
+	    KPROCESSOR_MODE  AccessMode,
+	    PVOID  *Object,
+	    POBJECT_HANDLE_INFORMATION  HandleInformation )
+{
+    FIXME( "%p %u %p %u %p %p\n", Handle, DesiredAccess, ObjectType,
+    		AccessMode, Object, HandleInformation );
+    
+    // Allocat a dummy object for now
+    *Object = HeapAlloc( GetProcessHeap(), 0, 0x4000 );
+    
+    memset(*Object, 0xCC, 0x4000);
+    
+    return STATUS_SUCCESS;
+}
+
+/***********************************************************************
+ *           ObReferenceObjectByName	(NTOSKRNL.EXE.@)
+ */
+NTSTATUS WINAPI ObReferenceObjectByName(
+		PUNICODE_STRING ObjectPath,
+		ULONG Attributes,
+		PACCESS_STATE PassedAccessState,
+		ACCESS_MASK DesiredAccess,
+		POBJECT_TYPE ObjectType,
+		KPROCESSOR_MODE AccessMode,
+		PVOID ParseContext,
+		PVOID* ObjectPtr)
+{
+    FIXME( "%p %u %p %u %p %u %p %p\n", ObjectPath, Attributes,
+    		PassedAccessState, DesiredAccess, ObjectType,
+    		AccessMode, ParseContext, ObjectPtr );
+    
+    // Allocat a dummy object for now
+    *ObjectPtr = HeapAlloc( GetProcessHeap(), 0, 0x4000 );
+    
+    memset(*ObjectPtr, 0xCD, 0x4000);
+    
+    return STATUS_SUCCESS;
+}
+
+/***********************************************************************
+ *           ObReferenceObjectByPointer	(NTOSKRNL.EXE.@)
+ */
+NTSTATUS WINAPI ObReferenceObjectByPointer(
+	    PVOID  Object,
+	    ACCESS_MASK  DesiredAccess,
+	    POBJECT_TYPE  ObjectType,
+	    KPROCESSOR_MODE  AccessMode )
+{
+    FIXME( "(%p %u %p %u) stub!\n", Object, DesiredAccess, ObjectType,
+    		AccessMode );
+    
+    memset(Object, 0xCE, 0x4000);
+    
+    return STATUS_SUCCESS;
+}
+
+
+/***********************************************************************
  *           PsCreateSystemThread   (NTOSKRNL.EXE.@)
  */
 NTSTATUS WINAPI PsCreateSystemThread(PHANDLE ThreadHandle, ULONG DesiredAccess,
 				     POBJECT_ATTRIBUTES ObjectAttributes,
 			             HANDLE ProcessHandle, PCLIENT_ID ClientId,
+
                                      PKSTART_ROUTINE StartRoutine, PVOID StartContext)
 {
     if (!ProcessHandle) ProcessHandle = GetCurrentProcess();
@@ -1116,6 +1578,7 @@ BOOLEAN WINAPI PsGetVersion(ULONG *major, ULONG *minor, ULONG *build, UNICODE_ST
 NTSTATUS WINAPI PsSetCreateProcessNotifyRoutine( PCREATE_PROCESS_NOTIFY_ROUTINE callback, BOOLEAN remove )
 {
     FIXME( "stub: %p %d\n", callback, remove );
+
     return STATUS_SUCCESS;
 }
 
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 7b95852..be3c324 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -139,10 +139,10 @@
 @ stub ExGetExclusiveWaiterCount
 @ stub ExGetPreviousMode
 @ stub ExGetSharedWaiterCount
-@ stub ExInitializeNPagedLookasideList
-@ stub ExInitializePagedLookasideList
-@ stub ExInitializeResourceLite
-@ stub ExInitializeZone
+@ stdcall ExInitializeNPagedLookasideList(ptr ptr ptr long long long long)
+@ stdcall ExInitializePagedLookasideList(ptr ptr ptr long long long long)
+@ stdcall ExInitializeResourceLite(ptr)
+@ stdcall ExInitializeZone(ptr long ptr long)
 @ stub ExInterlockedAddLargeInteger
 @ stub ExInterlockedAddUlong
 @ stub ExInterlockedDecrementLong
@@ -378,7 +378,7 @@
 @ stub IoGetBaseFileSystemDeviceObject
 @ stub IoGetBootDiskInformation
 @ stdcall IoGetConfigurationInformation()
-@ stub IoGetCurrentProcess
+@ stdcall IoGetCurrentProcess() kernel32.GetCurrentProcess
 @ stub IoGetDeviceAttachmentBaseRef
 @ stub IoGetDeviceInterfaceAlias
 @ stub IoGetDeviceInterfaces
@@ -547,17 +547,17 @@
 @ stub KeInitializeDeviceQueue
 @ stub KeInitializeDpc
 @ stdcall KeInitializeEvent(ptr long long)
-@ stub KeInitializeInterrupt
+@ stdcall KeInitializeInterrupt(ptr ptr ptr ptr long long long long long long)
 @ stub KeInitializeMutant
 @ stub KeInitializeMutex
 @ stub KeInitializeQueue
-@ stub KeInitializeSemaphore
+@ stdcall KeInitializeSemaphore(ptr long long)
 @ stdcall KeInitializeSpinLock(ptr)
 @ stdcall KeInitializeTimer(ptr)
 @ stdcall KeInitializeTimerEx(ptr long)
-@ stub KeInsertByKeyDeviceQueue
-@ stub KeInsertDeviceQueue
-@ stub KeInsertHeadQueue
+@ stdcall KeInsertByKeyDeviceQueue(ptr ptr long)
+@ stdcall KeInsertDeviceQueue(ptr ptr)
+@ stdcall KeInsertHeadQueue(ptr ptr)
 @ stub KeInsertQueue
 @ stub KeInsertQueueApc
 @ stub KeInsertQueueDpc
@@ -588,7 +588,7 @@
 @ stub KeReleaseInterruptSpinLock
 @ stub KeReleaseMutant
 @ stub KeReleaseMutex
-@ stub KeReleaseSemaphore
+@ stdcall KeReleaseSemaphore(ptr long long long)
 @ stub KeReleaseSpinLockFromDpcLevel
 @ stub KeRemoveByKeyDeviceQueue
 @ stub KeRemoveByKeyDeviceQueueIfBusy
@@ -597,7 +597,7 @@
 @ stub KeRemoveQueue
 @ stub KeRemoveQueueDpc
 @ stub KeRemoveSystemServiceTable
-@ stub KeResetEvent
+@ stdcall KeResetEvent(ptr)
 @ stub KeRestoreFloatingPointState
 @ stub KeRevertToUserAffinityThread
 @ stub KeRundownQueue
@@ -607,7 +607,7 @@
 @ stub KeSetAffinityThread
 @ stub KeSetBasePriorityThread
 @ stub KeSetDmaIoCoherency
-@ stub KeSetEvent
+@ stdcall KeSetEvent(ptr long long)
 @ stub KeSetEventBoostPriority
 @ stub KeSetIdealProcessorThread
 @ stub KeSetImportanceDpc
@@ -629,7 +629,7 @@
 @ stub KeUserModeCallback
 @ stub KeWaitForMultipleObjects
 @ stub KeWaitForMutexObject
-@ stub KeWaitForSingleObject
+@ stdcall KeWaitForSingleObject(ptr long long long ptr)
 @ stub KiBugCheckData
 @ stub KiCoprocessorError
 @ stub KiDeliverApc
@@ -690,8 +690,8 @@
 @ stub MmLockPagableSectionByHandle
 @ stub MmMapIoSpace
 @ stub MmMapLockedPages
-@ stub MmMapLockedPagesSpecifyCache
-@ stub MmMapLockedPagesWithReservedMapping
+@ stdcall MmMapLockedPagesSpecifyCache(ptr long long ptr long long)
+@ stdcall MmMapLockedPagesWithReservedMapping(ptr long ptr long)
 @ stub MmMapMemoryDumpMdl
 @ stub MmMapUserAddressesToPage
 @ stub MmMapVideoDisplay
@@ -702,7 +702,7 @@
 @ stub MmMarkPhysicalMemoryAsGood
 @ stdcall MmPageEntireDriver(ptr)
 @ stub MmPrefetchPages
-@ stub MmProbeAndLockPages
+@ stdcall MmProbeAndLockPages(ptr long long)
 @ stub MmProbeAndLockProcessPages
 @ stub MmProbeAndLockSelectedPages
 @ stub MmProtectMdlSystemAddress
@@ -717,7 +717,7 @@
 @ stub MmSystemRangeStart
 @ stub MmTrimAllSystemPagableMemory
 @ stub MmUnlockPagableImageSection
-@ stub MmUnlockPages
+@ stdcall MmUnlockPages(ptr)
 @ stub MmUnmapIoSpace
 @ stub MmUnmapLockedPages
 @ stub MmUnmapReservedMapping
@@ -810,8 +810,8 @@
 @ stub ObQueryNameString
 @ stub ObQueryObjectAuditingByHandle
 @ stdcall ObReferenceObjectByHandle(long long ptr long ptr ptr)
-@ stub ObReferenceObjectByName
-@ stub ObReferenceObjectByPointer
+@ stdcall ObReferenceObjectByName(ptr long ptr long ptr long ptr ptr)
+@ stdcall ObReferenceObjectByPointer(ptr long ptr long)
 @ stub ObReferenceSecurityDescriptor
 @ stub ObReleaseObjectSecurity
 @ stub ObSetHandleAttributes
diff --git a/include/ddk/wdm.h b/include/ddk/wdm.h
index 0f241b6..672886a 100644
--- a/include/ddk/wdm.h
+++ b/include/ddk/wdm.h
@@ -22,6 +22,13 @@
 
 #include <ntstatus.h>
 
+#define PAGE_ROUND_UP(x) ((((ULONG)x)|(PAGE_SIZE-1))+1)
+#define PAGE_ROUND_DOWN(x) (((ULONG)x)&(~PAGE_SIZE-1))
+
+#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size) \
+    (ULONG)((PAGE_ROUND_UP((Size) + ((ULONG_PTR)(Va))) - \
+        PAGE_ROUND_DOWN((ULONG_PTR)(Va))) / PAGE_SIZE)
+
 #ifdef _WIN64
 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
 #else
@@ -124,13 +131,87 @@ typedef enum _KWAIT_REASON
     MaximumWaitReason,
 } KWAIT_REASON;
 
+typedef struct _KQUEUE {
+  DISPATCHER_HEADER Header;
+  LIST_ENTRY EntryListHead;
+  ULONG CurrentCount;
+  ULONG MaximumCount;
+  LIST_ENTRY ThreadListHead;
+} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
+
+
+/* CRW - Check the type of these */
+typedef VOID *PKINTERRUPT;
+typedef VOID *PKSERVICE_ROUTINE;
+typedef ULONG KINTERRUPT_MODE;
+typedef VOID *PZONE_HEADER;
+
 typedef struct _IO_TIMER *PIO_TIMER;
 typedef struct _ETHREAD *PETHREAD;
 typedef struct _KTHREAD *PKTHREAD;
 typedef struct _EPROCESS *PEPROCESS;
 typedef struct _IO_WORKITEM *PIO_WORKITEM;
-typedef struct _OBJECT_TYPE *POBJECT_TYPE;
-typedef struct _OBJECT_HANDLE_INFORMATION *POBJECT_HANDLE_INFORMATION;
+
+typedef enum _MEMORY_CACHING_TYPE_ORIG {
+    MmFrameBufferCached = 2
+} MEMORY_CACHING_TYPE_ORIG;
+
+typedef enum _MEMORY_CACHING_TYPE {
+    MmNonCached = FALSE,
+    MmCached = TRUE,
+    MmWriteCombined = MmFrameBufferCached,
+    MmHardwareCoherentCached,
+    MmNonCachedUnordered,
+    MmUSWCCached,
+    MmMaximumCacheType
+} MEMORY_CACHING_TYPE;
+ 
+typedef enum _MM_PAGE_PRIORITY {
+    LowPagePriority,
+    NormalPagePriority = 16,
+    HighPagePriority = 32
+} MM_PAGE_PRIORITY;
+
+typedef enum _LOCK_OPERATION {
+	IoReadAccess,
+	IoWriteAccess,
+	IoModifyAccess
+} LOCK_OPERATION;
+
+typedef ULONG_PTR ERESOURCE_THREAD;
+typedef ERESOURCE_THREAD *PERESOURCE_THREAD;
+
+typedef struct _OWNER_ENTRY {
+    ERESOURCE_THREAD  OwnerThread;
+    union {
+        LONG  OwnerCount;
+        ULONG  TableSize;
+    } DUMMYUNIONNAME;
+} OWNER_ENTRY, *POWNER_ENTRY;
+
+typedef struct _KSEMAPHORE {
+    DISPATCHER_HEADER Header;
+    LONG Limit;
+} KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE;
+
+typedef struct _ERESOURCE {
+    LIST_ENTRY  SystemResourcesList;
+    POWNER_ENTRY  OwnerTable;
+    SHORT  ActiveCount;
+    USHORT  Flag;
+    PKSEMAPHORE  SharedWaiters;
+    PKEVENT  ExclusiveWaiters;
+    OWNER_ENTRY  OwnerThreads[2];
+    ULONG  ContentionCount;
+    USHORT  NumberOfSharedWaiters;
+    USHORT  NumberOfExclusiveWaiters;
+    union {
+        PVOID  Address;
+        ULONG_PTR  CreatorBackTraceIndex;
+    } DUMMYUNIONNAME;
+    KSPIN_LOCK  SpinLock;
+} ERESOURCE, *PERESOURCE;
+
 
 typedef struct _FAST_MUTEX
 {
@@ -166,6 +247,9 @@ typedef enum _POOL_TYPE {
   MaxPoolType
 } POOL_TYPE;
 
+typedef PVOID (*PALLOCATE_FUNCTION)(POOL_TYPE PoolType, SIZE_T NumberOfBytes, ULONG Tag);
+typedef VOID (*PFREE_FUNCTION)(PVOID Buffer);
+
 typedef struct _WAIT_CONTEXT_BLOCK {
   KDEVICE_QUEUE_ENTRY  WaitQueueEntry;
   struct _DRIVER_CONTROL  *DeviceRoutine;
@@ -920,6 +1004,139 @@ typedef struct _IO_STACK_LOCATION {
 } IO_STACK_LOCATION, *PIO_STACK_LOCATION;
 #include <poppack.h>
 
+typedef struct _OB_DUMP_CONTROL
+{
+	PVOID Stream;
+	ULONG Detail;
+} OB_DUMP_CONTROL, *POB_DUMP_CONTROL;
+
+typedef VOID (WINAPI *OB_DUMP_METHOD)(
+	PVOID Object,
+	POB_DUMP_CONTROL Control
+);
+
+typedef enum _SECURITY_OPERATION_CODE {
+    SetSecurityDescriptor,
+    QuerySecurityDescriptor,
+    DeleteSecurityDescriptor,
+    AssignSecurityDescriptor
+} SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE;
+
+typedef enum _OB_OPEN_REASON
+{
+    ObCreateHandle,
+    ObOpenHandle,
+    ObDuplicateHandle,
+    ObInheritHandle,
+    ObMaxOpenReason
+} OB_OPEN_REASON;
+
+typedef NTSTATUS (WINAPI *OB_OPEN_METHOD)(
+	OB_OPEN_REASON Reason,
+	PEPROCESS Process,
+	PVOID ObjectBody,
+	ACCESS_MASK GrantedAccess,
+	ULONG HandleCount
+);
+
+typedef VOID (WINAPI *OB_CLOSE_METHOD)(
+	PEPROCESS Process,
+	PVOID Object,
+	ACCESS_MASK GrantedAccess,
+	ULONG ProcessHandleCount,
+	ULONG SystemHandleCount
+);
+
+typedef VOID (WINAPI *OB_DELETE_METHOD)(
+	PVOID Object
+);
+ 
+typedef NTSTATUS (WINAPI *OB_PARSE_METHOD)(
+	PVOID ParseObject,
+	PVOID ObjectType,
+	PACCESS_STATE AccessState,
+	KPROCESSOR_MODE AccessMode,
+	ULONG Attributes,
+	PUNICODE_STRING CompleteName,
+	PUNICODE_STRING RemainingName,
+	PVOID Context OPTIONAL,
+	PSECURITY_QUALITY_OF_SERVICE SecurityQos,
+	PVOID *Object
+);
+
+typedef NTSTATUS (WINAPI *OB_SECURITY_METHOD)(
+    PVOID Object,
+    SECURITY_OPERATION_CODE OperationType,
+    PSECURITY_INFORMATION SecurityInformation,
+    PSECURITY_DESCRIPTOR SecurityDescriptor,
+    PULONG CapturedLength,
+    PSECURITY_DESCRIPTOR *ObjectSecurityDescriptor,
+    POOL_TYPE PoolType,
+    PGENERIC_MAPPING GenericMapping
+);
+ 
+typedef NTSTATUS (WINAPI *OB_QUERYNAME_METHOD)(
+    PVOID Object,
+    BOOLEAN HasObjectName,
+    POBJECT_NAME_INFORMATION ObjectNameInfo,
+    ULONG Length,
+    PULONG ReturnLength,
+    KPROCESSOR_MODE AccessMode
+);
+
+typedef NTSTATUS (WINAPI *OB_OKAYTOCLOSE_METHOD)(
+    PEPROCESS Process,
+    PVOID Object,
+    HANDLE Handle,
+    KPROCESSOR_MODE AccessMode
+);
+
+typedef struct _OBJECT_TYPE_INITIALIZER
+{
+    USHORT Length;
+    UCHAR UseDefaultObject;
+    UCHAR CaseInsensitive;
+    ULONG InvalidAttributes;
+    GENERIC_MAPPING GenericMapping;
+    ULONG ValidAccessMask;
+    UCHAR SecurityRequired;
+    UCHAR MaintainHandleCount;
+    UCHAR MaintainTypeList;
+    POOL_TYPE PoolType;
+    ULONG DefaultPagedPoolCharge;
+    ULONG DefaultNonPagedPoolCharge;
+    OB_DUMP_METHOD DumpProcedure;
+    OB_OPEN_METHOD OpenProcedure;
+    OB_CLOSE_METHOD CloseProcedure;
+    OB_DELETE_METHOD DeleteProcedure;
+    OB_PARSE_METHOD ParseProcedure;
+    OB_SECURITY_METHOD SecurityProcedure;
+    OB_QUERYNAME_METHOD QueryNameProcedure;
+    OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure;
+} OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;
+
+typedef struct _OBJECT_TYPE
+{
+    ERESOURCE Mutex;
+    LIST_ENTRY TypeList;
+    UNICODE_STRING Name;
+    PVOID DefaultObject;
+    ULONG Index;
+    ULONG TotalNumberOfObjects;
+    ULONG TotalNumberOfHandles;
+    ULONG HighWaterNumberOfObjects;
+    ULONG HighWaterNumberOfHandles;
+    OBJECT_TYPE_INITIALIZER TypeInfo;
+    ULONG Key;
+    ERESOURCE ObjectLocks[4];
+} OBJECT_TYPE, *POBJECT_TYPE;
+
+
+typedef struct _OBJECT_HANDLE_INFORMATION {
+    ULONG HandleAttributes;
+    ACCESS_MASK GrantedAccess;
+} OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
+
 typedef struct _MDL {
   struct _MDL  *Next;
   CSHORT  Size;
@@ -931,6 +1148,32 @@ typedef struct _MDL {
   ULONG  ByteOffset;
 } MDL, *PMDL;
 
+#define MDL_MAPPED_TO_SYSTEM_VA           0x0001
+#define MDL_PAGES_LOCKED                  0x0002
+#define MDL_SOURCE_IS_NONPAGED_POOL       0x0004
+#define MDL_ALLOCATED_FIXED_SIZE          0x0008
+#define MDL_PARTIAL                       0x0010
+#define MDL_PARTIAL_HAS_BEEN_MAPPED       0x0020
+#define MDL_IO_PAGE_READ                  0x0040
+#define MDL_WRITE_OPERATION               0x0080
+#define MDL_PARENT_MAPPED_SYSTEM_VA       0x0100
+#define MDL_FREE_EXTRA_PTES               0x0200
+#define MDL_IO_SPACE                      0x0800
+#define MDL_NETWORK_HEADER                0x1000
+#define MDL_MAPPING_CAN_FAIL              0x2000
+#define MDL_ALLOCATED_MUST_SUCCEED        0x4000
+
+#define MDL_MAPPING_FLAGS ( \
+  MDL_MAPPED_TO_SYSTEM_VA     | \
+  MDL_PAGES_LOCKED            | \
+  MDL_SOURCE_IS_NONPAGED_POOL | \
+  MDL_PARTIAL_HAS_BEEN_MAPPED | \
+  MDL_PARENT_MAPPED_SYSTEM_VA | \
+  MDL_SYSTEM_VA               | \
+  MDL_IO_SPACE)
+
+typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
+
 typedef struct _KTIMER {
     DISPATCHER_HEADER Header;
     ULARGE_INTEGER DueTime;
@@ -1164,4 +1407,73 @@ NTSTATUS  WINAPI ZwWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,co
 NTSTATUS  WINAPI ZwWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
 NTSTATUS  WINAPI ZwYieldExecution(void);
 
+
+typedef enum _KOBJECTS
+{
+    EventNotificationObject = 0,
+    EventSynchronizationObject = 1,
+    MutantObject = 2,
+    ProcessObject = 3,
+    QueueObject = 4,
+    SemaphoreObject = 5,
+    ThreadObject = 6,
+    GateObject = 7,
+    TimerNotificationObject = 8,
+    TimerSynchronizationObject = 9,
+    Spare2Object = 10,
+    Spare3Object = 11,
+    Spare4Object = 12,
+    Spare5Object = 13,
+    Spare6Object = 14,
+    Spare7Object = 15,
+    Spare8Object = 16,
+    Spare9Object = 17,
+    ApcObject = 18,
+    DpcObject = 19,
+    DeviceQueueObject = 20,
+    EventPairObject = 21,
+    InterruptObject = 22,
+    ProfileObject = 23,
+    ThreadedDpcObject = 24,
+    MaximumKernelObject = 25
+} KOBJECTS;
+
+typedef struct _GENERAL_LOOKASIDE {
+  SLIST_HEADER  ListHead;
+  USHORT  Depth;
+  USHORT  MaximumDepth;
+  ULONG  TotalAllocates;
+  union {
+    ULONG  AllocateMisses;
+    ULONG  AllocateHits;
+  };
+  ULONG  TotalFrees;
+  union {
+    ULONG  FreeMisses;
+    ULONG  FreeHits;
+  };
+  POOL_TYPE  Type;
+  ULONG  Tag;
+  ULONG  Size;
+  PALLOCATE_FUNCTION  Allocate;
+  PFREE_FUNCTION  Free;
+  LIST_ENTRY  ListEntry;
+  ULONG  LastTotalAllocates;
+  union {
+    ULONG  LastAllocateMisses;
+    ULONG  LastAllocateHits;
+  };
+  ULONG Future[2];
+} GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
+
+typedef struct _NPAGED_LOOKASIDE_LIST {
+  GENERAL_LOOKASIDE  L;
+  KSPIN_LOCK  Obsoleted;
+} NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
+
+typedef struct _PAGED_LOOKASIDE_LIST {
+  GENERAL_LOOKASIDE  L;
+  FAST_MUTEX  Obsoleted;
+} PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
+
 #endif
-- 
1.5.6.3


--=-OcwQRztMkqlD1dhtvDz9--




More information about the wine-devel mailing list