mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
528 lines
11 KiB
528 lines
11 KiB
|
|
/* Type - OPEN - SET - QUERY - CLOSE - DUP_ - READ - WRITE
|
|
STATE TYPE HANDLE
|
|
-----------------------------------------------------------------
|
|
Nul - X - 1 - DEV - DEV - DEV - X - X
|
|
Con - X - 1 - DEV - DEV - DEV - X - SCR
|
|
Com - X - 1 - DEV - DEV - DEV - 2 - 2
|
|
Lpt - X - 1 - DEV - DEV - DEV - 2 - 2
|
|
Kbd - X - 1 - DEV - X - X - X - NUL
|
|
Mouse - X - 1 - DEV - X - X - 2 - 2
|
|
Clock - X - 1 - DEV - DEV - DEV - 2 - 2
|
|
Screen - X - 1 - DEV - DEV - DEV - NUL - X
|
|
Pointer - X - 1 - DEV - DEV - DEV - 2 - 2
|
|
File - X - X - X - X - X - X - X
|
|
Pipe - FIL - FIL - FIL - FIL - FIL - FIL - X
|
|
Device - FIL - 1 - X - FIL - FIL - FIL - FIL
|
|
Remote - - X - X - X - X - X - X
|
|
Monitor - - 3 - 3 - 3 - 3 - 2 - 2
|
|
|
|
other: 1 - NonFile, 2 - Tmp, 3 - NoSupp
|
|
*/
|
|
|
|
|
|
APIRET
|
|
NulOpenRoutine(
|
|
OUT PHANDLE FileHandle,
|
|
IN ULONG DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN PIO_STATUS_BLOCK IoStatus,
|
|
IN ULONG CreateSize,
|
|
OUT PULONG ActionTaken,
|
|
IN ULONG FileAttributes,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG CreateDisposition,
|
|
IN ULONG CreateOptions,
|
|
IN OUT PEAOP2 ExtendedFileAttr OPTIONAL,
|
|
OUT PUSHORT FileType,
|
|
OUT PUSHORT DeviceAttribute
|
|
);
|
|
|
|
APIRET
|
|
ConOpenRoutine(
|
|
OUT PHANDLE FileHandle,
|
|
IN ULONG DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN PIO_STATUS_BLOCK IoStatus,
|
|
IN ULONG CreateSize,
|
|
OUT PULONG ActionTaken,
|
|
IN ULONG FileAttributes,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG CreateDisposition,
|
|
IN ULONG CreateOptions,
|
|
IN OUT PEAOP2 ExtendedFileAttr OPTIONAL,
|
|
OUT PUSHORT FileType,
|
|
OUT PUSHORT DeviceAttribute
|
|
);
|
|
|
|
APIRET
|
|
ComOpenRoutine(
|
|
OUT PHANDLE FileHandle,
|
|
IN ULONG DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN PIO_STATUS_BLOCK IoStatus,
|
|
IN ULONG CreateSize,
|
|
OUT PULONG ActionTaken,
|
|
IN ULONG FileAttributes,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG CreateDisposition,
|
|
IN ULONG CreateOptions,
|
|
IN OUT PEAOP2 ExtendedFileAttr OPTIONAL,
|
|
OUT PUSHORT FileType,
|
|
OUT PUSHORT DeviceAttribute
|
|
);
|
|
|
|
APIRET
|
|
LptOpenRoutine(
|
|
OUT PHANDLE FileHandle,
|
|
IN ULONG DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN PIO_STATUS_BLOCK IoStatus,
|
|
IN ULONG CreateSize,
|
|
OUT PULONG ActionTaken,
|
|
IN ULONG FileAttributes,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG CreateDisposition,
|
|
IN ULONG CreateOptions,
|
|
IN OUT PEAOP2 ExtendedFileAttr OPTIONAL,
|
|
OUT PUSHORT FileType,
|
|
OUT PUSHORT DeviceAttribute
|
|
);
|
|
|
|
APIRET
|
|
KbdOpenRoutine(
|
|
OUT PHANDLE FileHandle,
|
|
IN ULONG DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN PIO_STATUS_BLOCK IoStatus,
|
|
IN ULONG CreateSize,
|
|
OUT PULONG ActionTaken,
|
|
IN ULONG FileAttributes,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG CreateDisposition,
|
|
IN ULONG CreateOptions,
|
|
IN OUT PEAOP2 ExtendedFileAttr OPTIONAL,
|
|
OUT PUSHORT FileType,
|
|
OUT PUSHORT DeviceAttribute
|
|
);
|
|
|
|
APIRET
|
|
MouseOpenRoutine(
|
|
OUT PHANDLE FileHandle,
|
|
IN ULONG DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN PIO_STATUS_BLOCK IoStatus,
|
|
IN ULONG CreateSize,
|
|
OUT PULONG ActionTaken,
|
|
IN ULONG FileAttributes,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG CreateDisposition,
|
|
IN ULONG CreateOptions,
|
|
IN OUT PEAOP2 ExtendedFileAttr OPTIONAL,
|
|
OUT PUSHORT FileType,
|
|
OUT PUSHORT DeviceAttribute
|
|
);
|
|
|
|
APIRET
|
|
ClockOpenRoutine(
|
|
OUT PHANDLE FileHandle,
|
|
IN ULONG DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN PIO_STATUS_BLOCK IoStatus,
|
|
IN ULONG CreateSize,
|
|
OUT PULONG ActionTaken,
|
|
IN ULONG FileAttributes,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG CreateDisposition,
|
|
IN ULONG CreateOptions,
|
|
IN OUT PEAOP2 ExtendedFileAttr OPTIONAL,
|
|
OUT PUSHORT FileType,
|
|
OUT PUSHORT DeviceAttribute
|
|
);
|
|
|
|
APIRET
|
|
ScreenOpenRoutine(
|
|
OUT PHANDLE FileHandle,
|
|
IN ULONG DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN PIO_STATUS_BLOCK IoStatus,
|
|
IN ULONG CreateSize,
|
|
OUT PULONG ActionTaken,
|
|
IN ULONG FileAttributes,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG CreateDisposition,
|
|
IN ULONG CreateOptions,
|
|
IN OUT PEAOP2 ExtendedFileAttr OPTIONAL,
|
|
OUT PUSHORT FileType,
|
|
OUT PUSHORT DeviceAttribute
|
|
);
|
|
|
|
APIRET
|
|
PointerOpenRoutine(
|
|
OUT PHANDLE FileHandle,
|
|
IN ULONG DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN PIO_STATUS_BLOCK IoStatus,
|
|
IN ULONG CreateSize,
|
|
OUT PULONG ActionTaken,
|
|
IN ULONG FileAttributes,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG CreateDisposition,
|
|
IN ULONG CreateOptions,
|
|
IN OUT PEAOP2 ExtendedFileAttr OPTIONAL,
|
|
OUT PUSHORT FileType,
|
|
OUT PUSHORT DeviceAttribute
|
|
);
|
|
|
|
APIRET
|
|
FileOpenRoutine(
|
|
OUT PHANDLE FileHandle,
|
|
IN ULONG DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN PIO_STATUS_BLOCK IoStatus,
|
|
IN ULONG CreateSize,
|
|
OUT PULONG ActionTaken,
|
|
IN ULONG FileAttributes,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG CreateDisposition,
|
|
IN ULONG CreateOptions,
|
|
IN OUT PEAOP2 ExtendedFileAttr OPTIONAL,
|
|
OUT PUSHORT FileType,
|
|
OUT PUSHORT DeviceAttribute
|
|
);
|
|
|
|
APIRET
|
|
NonFileSetHandleStateRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
IN ULONG OpenMode
|
|
);
|
|
|
|
APIRET
|
|
FileSetHandleStateRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
IN ULONG OpenMode
|
|
);
|
|
|
|
APIRET
|
|
RemoteSetHandleStateRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
IN ULONG OpenMode
|
|
);
|
|
|
|
APIRET
|
|
NoSuppSetHandleStateRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
IN ULONG OpenMode
|
|
);
|
|
|
|
APIRET
|
|
FileQueryHTypeRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PULONG HandleType,
|
|
OUT PULONG DeviceFlags
|
|
);
|
|
|
|
APIRET
|
|
DeviceQueryHTypeRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PULONG HandleType,
|
|
OUT PULONG DeviceFlags
|
|
);
|
|
|
|
APIRET
|
|
RemoteQueryHTypeRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PULONG HandleType,
|
|
OUT PULONG DeviceFlags
|
|
);
|
|
|
|
APIRET
|
|
NoSuppQueryHTypeRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PULONG HandleType,
|
|
OUT PULONG DeviceFlags
|
|
);
|
|
|
|
APIRET
|
|
KbdCloseRoutine(
|
|
IN PFILE_HANDLE hFileRecord
|
|
);
|
|
|
|
APIRET
|
|
MouseCloseRoutine(
|
|
IN PFILE_HANDLE hFileRecord
|
|
);
|
|
|
|
APIRET
|
|
FileCloseRoutine(
|
|
IN PFILE_HANDLE hFileRecord
|
|
);
|
|
|
|
APIRET
|
|
DeviceCloseRoutine(
|
|
IN PFILE_HANDLE hFileRecord
|
|
);
|
|
|
|
APIRET
|
|
RemoteCloseRoutine(
|
|
IN PFILE_HANDLE hFileRecord
|
|
);
|
|
|
|
APIRET
|
|
NoSuppCloseRoutine(
|
|
IN PFILE_HANDLE hFileRecord
|
|
);
|
|
|
|
APIRET
|
|
ComCloseRoutine(
|
|
IN PFILE_HANDLE hFileRecord
|
|
);
|
|
|
|
APIRET
|
|
ComDupHandleRoutine(
|
|
IN PFILE_HANDLE hOldFileRecord,
|
|
IN PFILE_HANDLE hNewFileRecord
|
|
);
|
|
|
|
APIRET
|
|
KbdDupHandleRoutine(
|
|
IN PFILE_HANDLE hOldFileRecord,
|
|
IN PFILE_HANDLE hNewFileRecord
|
|
);
|
|
|
|
APIRET
|
|
MouseDupHandleRoutine(
|
|
IN PFILE_HANDLE hOldFileRecord,
|
|
IN PFILE_HANDLE hNewFileRecord
|
|
);
|
|
|
|
APIRET
|
|
FileDupHandleRoutine(
|
|
IN PFILE_HANDLE hOldFileRecord,
|
|
IN PFILE_HANDLE hNewFileRecord
|
|
);
|
|
|
|
APIRET
|
|
DeviceDupHandleRoutine(
|
|
IN PFILE_HANDLE hOldFileRecord,
|
|
IN PFILE_HANDLE hNewFileRecord
|
|
);
|
|
|
|
APIRET
|
|
RemoteDupHandleRoutine(
|
|
IN PFILE_HANDLE hOldFileRecord,
|
|
IN PFILE_HANDLE hNewFileRecord
|
|
);
|
|
|
|
APIRET
|
|
NoSuppDupHandleRoutine(
|
|
IN PFILE_HANDLE hOldFileRecord,
|
|
IN PFILE_HANDLE hNewFileRecord
|
|
);
|
|
|
|
APIRET
|
|
NulReadRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesRead
|
|
);
|
|
|
|
APIRET
|
|
ConReadRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesRead
|
|
);
|
|
|
|
APIRET
|
|
KbdReadRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesRead
|
|
);
|
|
|
|
APIRET
|
|
FileReadRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesRead
|
|
);
|
|
|
|
APIRET
|
|
RemoteReadRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesRead
|
|
);
|
|
|
|
APIRET
|
|
TmpReadRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesRead
|
|
);
|
|
|
|
APIRET
|
|
ComReadRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesRead
|
|
);
|
|
|
|
APIRET
|
|
NulWriteRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
IN PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesWritten
|
|
);
|
|
|
|
APIRET
|
|
ScreenWriteRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesWritten
|
|
);
|
|
|
|
APIRET
|
|
FileWriteRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
IN PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesWritten
|
|
);
|
|
|
|
APIRET
|
|
RemoteWriteRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesWritten
|
|
);
|
|
|
|
APIRET
|
|
TmpWriteRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
IN PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesWritten
|
|
);
|
|
|
|
APIRET
|
|
ComWriteRoutine(
|
|
IN PFILE_HANDLE hFileRecord,
|
|
IN PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesWritten
|
|
);
|
|
|
|
//
|
|
// This function is called to open an object.
|
|
//
|
|
|
|
typedef
|
|
APIRET
|
|
(*POS2OPEN_ROUTINE) (
|
|
OUT PHANDLE FileHandle,
|
|
IN ULONG DesiredAccess,
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
IN PIO_STATUS_BLOCK IoStatus,
|
|
IN ULONG CreateSize,
|
|
OUT PULONG ActionTaken,
|
|
IN ULONG FileAttributes,
|
|
IN ULONG ShareAccess,
|
|
IN ULONG CreateDisposition,
|
|
IN ULONG CreateOptions,
|
|
IN OUT PEAOP2 ExtendedFileAttr OPTIONAL,
|
|
OUT PUSHORT FileType,
|
|
OUT PUSHORT DeviceAttribute
|
|
);
|
|
|
|
//
|
|
// This function is called to set the state of a handle (inherited,
|
|
// writethrough, etc)
|
|
//
|
|
|
|
typedef
|
|
APIRET
|
|
(*POS2SET_HANDLE_STATE_ROUTINE) (
|
|
IN PFILE_HANDLE hFileRecord,
|
|
IN ULONG OpenMode
|
|
);
|
|
|
|
//
|
|
// This function is called to query the type of a handle (device, file, etc)
|
|
//
|
|
|
|
typedef
|
|
APIRET
|
|
(*POS2QUERY_HANDLE_TYPE_ROUTINE) (
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PULONG HandleType,
|
|
OUT PULONG DeviceFlags
|
|
);
|
|
|
|
//
|
|
// This function is called to close a handle. it doesn't free the handle.
|
|
//
|
|
|
|
typedef
|
|
APIRET
|
|
(*POS2CLOSE_ROUTINE) (
|
|
IN PFILE_HANDLE hFileRecord
|
|
);
|
|
|
|
//
|
|
// This function is called to do a handle duplicate operation
|
|
//
|
|
|
|
typedef
|
|
APIRET
|
|
(*POS2DUP_HANDLE_ROUTINE) (
|
|
IN PFILE_HANDLE hOldFileRecord,
|
|
IN PFILE_HANDLE hNewFileRecord
|
|
);
|
|
|
|
//
|
|
// This function is called to do a read operation
|
|
//
|
|
|
|
typedef
|
|
APIRET
|
|
(*POS2READ_ROUTINE) (
|
|
IN PFILE_HANDLE hFileRecord,
|
|
OUT PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesRead
|
|
);
|
|
|
|
//
|
|
// This function is called to do a write operation
|
|
//
|
|
|
|
typedef
|
|
APIRET
|
|
(*POS2WRITE_ROUTINE) (
|
|
IN PFILE_HANDLE hFileRecord,
|
|
IN PVOID Buffer,
|
|
IN ULONG Length,
|
|
OUT PULONG BytesWritten
|
|
);
|
|
|
|
typedef struct _OS2IO_VECTORS {
|
|
POS2OPEN_ROUTINE OpenRoutine;
|
|
POS2SET_HANDLE_STATE_ROUTINE SetHandleStateRoutine;
|
|
POS2QUERY_HANDLE_TYPE_ROUTINE QueryHandleTypeRoutine;
|
|
POS2CLOSE_ROUTINE CloseRoutine;
|
|
POS2DUP_HANDLE_ROUTINE DupHandleRoutine;
|
|
POS2READ_ROUTINE ReadRoutine;
|
|
POS2WRITE_ROUTINE WriteRoutine;
|
|
} OS2IO_VECTORS, *POS2IO_VECTORS;
|