add page cache with read-ahead and dirty writeback, file-backed and anonymous mmap with CoW, VAD-based virtual memory replacing the old user region model, PFN database with eviction and reclaim, file identity for cross-open section sharing, FAT32 path cache and per-file cluster chain cache, serial.sys for COM1 keyboard input, xHCI MSI with INTx and polled fallback, PciEnableMsiAuto, waitable input queue, KeWaitForAnyEvent, per-process thread info syscall, expanded kernel stats (PFN/PTE/VAD/file-cache/disk), pool allocation tags, async I/O user buffer locking, file flush on close, add docs.md.
This commit is contained in:
1 parent
61ec2442eb
commit
2c4a68a75f
114 files changed
+18069
-2620
No files matched your search
+27
-2
@@ -5,11 +5,36 @@
|
||||
#include <kernel/ob_object.h>
|
||||
#include <kernel/mm_virt.h>
|
||||
|
||||
// Creates object.
|
||||
// Returns a diagnostic pool tag for the object type.
|
||||
static uint32_t KiObjectPoolTag(OBJECT_TYPE type) {
|
||||
switch (type) {
|
||||
case ObjectTypeProcess: return MM_POOL_TAG('p', 'r', 'o', 'c');
|
||||
case ObjectTypeThread: return MM_POOL_TAG('t', 'h', 'r', 'd');
|
||||
case ObjectTypeMutex: return MM_POOL_TAG('m', 't', 'x', ' ');
|
||||
case ObjectTypeSemaphore: return MM_POOL_TAG('s', 'e', 'm', ' ');
|
||||
case ObjectTypeEvent: return MM_POOL_TAG('e', 'v', 'n', 't');
|
||||
case ObjectTypeQueue: return MM_POOL_TAG('q', 'u', 'e', 'u');
|
||||
case ObjectTypeFile: return MM_POOL_TAG('f', 'i', 'l', 'e');
|
||||
case ObjectTypeDir: return MM_POOL_TAG('d', 'i', 'r', ' ');
|
||||
case ObjectTypeAsyncIo: return MM_POOL_TAG('a', 'i', 'o', ' ');
|
||||
case ObjectTypeSocket: return MM_POOL_TAG('s', 'o', 'c', 'k');
|
||||
case ObjectTypeDevice: return MM_POOL_TAG('d', 'e', 'v', ' ');
|
||||
case ObjectTypeDriver: return MM_POOL_TAG('d', 'r', 'v', 'r');
|
||||
case ObjectTypeUsbDevice: return MM_POOL_TAG('u', 's', 'b', 'd');
|
||||
case ObjectTypeUsbPipe: return MM_POOL_TAG('u', 's', 'b', 'p');
|
||||
case ObjectTypeFileMapping: return MM_POOL_TAG('m', 'a', 'p', 'f');
|
||||
case ObjectTypeSurface: return MM_POOL_TAG('s', 'u', 'r', 'f');
|
||||
case ObjectTypeInputQueue: return MM_POOL_TAG('i', 'n', 'p', 'q');
|
||||
case ObjectTypeImageSection: return MM_POOL_TAG('i', 'm', 's', 'e');
|
||||
default: return MM_POOL_TAG('o', 'b', 'j', ' ');
|
||||
}
|
||||
}
|
||||
|
||||
// Creates a zeroed, tagged object with one initial reference.
|
||||
__declspec(dllexport) OBJECT* ObAllocateObject(OBJECT_TYPE type, size_t size) {
|
||||
if (size < sizeof(OBJECT)) size = sizeof(OBJECT);
|
||||
|
||||
OBJECT* obj = (OBJECT *)MmAllocatePool(size);
|
||||
OBJECT* obj = (OBJECT *)MmAllocatePoolTag(size, KiObjectPoolTag(type));
|
||||
if (!obj) return (OBJECT *)0;
|
||||
|
||||
memset(obj, 0, size);
|
||||
|
||||
Reference in new issue
Block a user