+ HANDLE ThreadHandle;
+ PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)MiniportAdapterHandle;
+ PMINIPORT_SHARED_MEMORY Memory;
+
+ NDIS_DbgPrint(MAX_TRACE,("Called.\n"));
+
+ ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
+
+ /* Must be NonpagedPool because by definition we're at DISPATCH_LEVEL */
+ Memory = ExAllocatePool(NonPagedPool, sizeof(MINIPORT_SHARED_MEMORY));
+
+ if(!Memory)
+ {
+ NDIS_DbgPrint(MID_TRACE, ("Insufficient resources\n"));
+ return;
+ }
+
+ Memory->AdapterObject = Adapter->AdapterObject;
+ Memory->Length = Length;
+ Memory->PhysicalAddress = PhysicalAddress;
+ Memory->VirtualAddress = VirtualAddress;
+ Memory->Cached = Cached;
+
+ PsCreateSystemThread(&ThreadHandle, THREAD_ALL_ACCESS, 0, 0, 0, NdisMFreeSharedMemoryPassive, Memory);
+ ZwClose(ThreadHandle);