6 #include <rosrtl/string.h>
12 ApcRoutine(PVOID Context
,
13 PIO_STATUS_BLOCK IoStatus
,
16 printf("(apc.exe) ApcRoutine(Context %p)\n", Context
);
20 int main(int argc
, char* argv
[])
24 OBJECT_ATTRIBUTES ObjectAttributes
;
25 UNICODE_STRING FileName
= ROS_STRING_INITIALIZER(L
"\\C:\\a.txt");
26 IO_STATUS_BLOCK IoStatus
;
32 InputHandle
= GetStdHandle(STD_INPUT_HANDLE
);
33 OutputHandle
= GetStdHandle(STD_OUTPUT_HANDLE
);
35 printf("APC test program\n");
37 EventHandle
= CreateEventW(NULL
,
41 if (EventHandle
== INVALID_HANDLE_VALUE
)
43 printf("Failed to create event\n");
47 printf("Opening file\n");
48 InitializeObjectAttributes(&ObjectAttributes
,
54 printf("Creating file\n");
55 FileHandle
= CreateFileW(L
"C:\\a.txt",
56 FILE_GENERIC_READ
| FILE_GENERIC_WRITE
,
63 if (FileHandle
== INVALID_HANDLE_VALUE
)
66 printf("Open failed last err 0x%lu\n",GetLastError());
72 printf("Reading file\n");
73 Status
= ZwReadFile(FileHandle
,
75 (PIO_APC_ROUTINE
)ApcRoutine
,
80 &off
,//offset must exist if file was opened for asynch. i/o aka. OVERLAPPED
83 if (!NT_SUCCESS(Status
))
85 printf("Read failed status 0x%lu\n",Status
);
88 WaitForSingleObjectEx(EventHandle
, INFINITE
, TRUE
);
89 printf("Returned from wait\n");
91 printf("Program finished\n");