/* 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;