implement proper IRQL, DPCs, kernel and user APCs, alertable waits, async file I/O with cancellation, trap frames, selftests, a real driver/device model, native async FAT32, VFAT dotfile fixes, syscall ABI cleanup, async_apc and async_cancel tests, POSIX multi-volume paths, and pimp the readme.
This commit is contained in:
1 parent
f5fd7bdd75
commit
529f816166
75 files changed
+9969
-5675
No files matched your search
+14
-1
@@ -12,6 +12,7 @@
|
||||
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <ke_list.h>
|
||||
#include <ke_spinlock.h>
|
||||
#include <ke_status.h>
|
||||
@@ -20,6 +21,7 @@
|
||||
// We only ever hold pointers in IRP and IRP_QUEUE, so a forward decl suffices.
|
||||
struct EVENT;
|
||||
struct SEMAPHORE;
|
||||
struct KAPC;
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// IRP flags
|
||||
@@ -34,7 +36,9 @@ struct SEMAPHORE;
|
||||
|
||||
typedef struct IRP IRP;
|
||||
|
||||
// Completion callback: invoked in driver worker context; must not block.
|
||||
// Completion callback: invoked by IoCompleteRequest() in the completing
|
||||
// context. Today that is the driver worker or sync fallback path; future
|
||||
// DPC/APC work will keep all completion policy centralized here.
|
||||
typedef void (*IRP_COMPLETION_FN)(IRP *irp, void *ctx);
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
@@ -56,10 +60,15 @@ typedef struct IRP {
|
||||
// ---- Completion (caller fills before submit; driver writes Status) ----
|
||||
|
||||
volatile KSTATUS Status;
|
||||
volatile size_t Information; // bytes transferred on success
|
||||
|
||||
// Forward-declared pointer: callers that create events include ke_event.h.
|
||||
struct EVENT *CompletionEvent;
|
||||
|
||||
// Optional kernel APC. If set, IoCompleteRequest queues it to its
|
||||
// target thread with arg1=irp and arg2=(void*)(uintptr_t)status.
|
||||
struct KAPC *CompletionApc;
|
||||
|
||||
IRP_COMPLETION_FN CompletionFn;
|
||||
void *CompletionCtx;
|
||||
|
||||
@@ -88,6 +97,10 @@ __declspec(dllexport) IRP *IrpQueueDequeue (IRP_QUEUE *q);
|
||||
// Public dispatch API - implemented in kernel/ke_irp.c
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
// Complete an IRP exactly once: publish status/information, signal the
|
||||
// optional completion event, then invoke the optional completion callback.
|
||||
__declspec(dllexport) void IoCompleteRequest(IRP *irp, KSTATUS status, size_t information);
|
||||
|
||||
// Submit asynchronously. Returns STATUS_PENDING on success.
|
||||
__declspec(dllexport) KSTATUS IoSubmitIrp (IRP *irp);
|
||||
|
||||
|
||||
Reference in new issue
Block a user