mirror of
https://github.com/mirror/processhacker
synced 2026-06-08 16:03:24 +00:00
fb6f41d2b3
* fixed string builder resizing * use NT-Win32 status codes instead of STATUS_UNSUCCESSFUL/GetLastError * fixed KUSER_SHARED_DATA definition * added NtCreateNamedPipeFile and NtCreateMailslotFile * updated several NT structure definitions, completed TEB definition * added some more anti-Win32-ization #defines * improved KphTerminateProcess/KphTerminateThread when trying to terminate self * improved PhShellExecuteEx * added PhWaitForMultipleObjectsAndPump git-svn-id: svn://svn.code.sf.net/p/processhacker/code@2915 21ef857c-d57f-4fe0-8362-d861dc6d29cd
342 lines
10 KiB
C
342 lines
10 KiB
C
#ifndef NTIOAPI_H
|
|
#define NTIOAPI_H
|
|
|
|
// Create disposition
|
|
|
|
#define FILE_SUPERSEDE 0x00000000
|
|
#define FILE_OPEN 0x00000001
|
|
#define FILE_CREATE 0x00000002
|
|
#define FILE_OPEN_IF 0x00000003
|
|
#define FILE_OVERWRITE 0x00000004
|
|
#define FILE_OVERWRITE_IF 0x00000005
|
|
|
|
// Create/open flags
|
|
|
|
#define FILE_DIRECTORY_FILE 0x00000001
|
|
#define FILE_WRITE_THROUGH 0x00000002
|
|
#define FILE_SEQUENTIAL_ONLY 0x00000004
|
|
#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
|
|
|
|
#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
|
|
#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
|
|
#define FILE_NON_DIRECTORY_FILE 0x00000040
|
|
#define FILE_CREATE_TREE_CONNECTION 0x00000080
|
|
|
|
#define FILE_COMPLETE_IF_OPLOCKED 0x00000100
|
|
#define FILE_NO_EA_KNOWLEDGE 0x00000200
|
|
#define FILE_OPEN_FOR_RECOVERY 0x00000400
|
|
#define FILE_RANDOM_ACCESS 0x00000800
|
|
|
|
#define FILE_DELETE_ON_CLOSE 0x00001000
|
|
#define FILE_OPEN_BY_FILE_ID 0x00002000
|
|
#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
|
|
#define FILE_NO_COMPRESSION 0x00008000
|
|
|
|
#define FILE_RESERVE_OPFILTER 0x00100000
|
|
#define FILE_OPEN_REPARSE_POINT 0x00200000
|
|
#define FILE_OPEN_NO_RECALL 0x00400000
|
|
#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
|
|
|
|
|
|
#define FILE_COPY_STRUCTURED_STORAGE 0x00000041
|
|
#define FILE_STRUCTURED_STORAGE 0x00000441
|
|
|
|
// I/O status information values for NtCreateFile/NtOpenFile
|
|
|
|
#define FILE_SUPERSEDED 0x00000000
|
|
#define FILE_OPENED 0x00000001
|
|
#define FILE_CREATED 0x00000002
|
|
#define FILE_OVERWRITTEN 0x00000003
|
|
#define FILE_EXISTS 0x00000004
|
|
#define FILE_DOES_NOT_EXIST 0x00000005
|
|
|
|
// Named pipe values
|
|
|
|
// NamedPipeType for NtCreateNamedPipeFile
|
|
#define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
|
|
#define FILE_PIPE_MESSAGE_TYPE 0x00000001
|
|
|
|
// CompletionMode for NtCreateNamedPipeFile
|
|
#define FILE_PIPE_QUEUE_OPERATION 0x00000000
|
|
#define FILE_PIPE_COMPLETE_OPERATION 0x00000001
|
|
|
|
// ReadMode for NtCreateNamedPipeFile
|
|
#define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
|
|
#define FILE_PIPE_MESSAGE_MODE 0x00000001
|
|
|
|
// NamedPipeConfiguration for NtQueryInformationFile
|
|
#define FILE_PIPE_INBOUND 0x00000000
|
|
#define FILE_PIPE_OUTBOUND 0x00000001
|
|
#define FILE_PIPE_FULL_DUPLEX 0x00000002
|
|
|
|
// NamedPipeState for NtQueryInformationFile
|
|
#define FILE_PIPE_DISCONNECTED_STATE 0x00000001
|
|
#define FILE_PIPE_LISTENING_STATE 0x00000002
|
|
#define FILE_PIPE_CONNECTED_STATE 0x00000003
|
|
#define FILE_PIPE_CLOSING_STATE 0x00000004
|
|
|
|
// NamedPipeEnd for NtQueryInformationFile
|
|
#define FILE_PIPE_CLIENT_END 0x00000000
|
|
#define FILE_PIPE_SERVER_END 0x00000001
|
|
|
|
// Mailslot values
|
|
|
|
#define MAILSLOT_SIZE_AUTO 0
|
|
|
|
// Special ByteOffset parameters
|
|
|
|
#define FILE_WRITE_TO_END_OF_FILE 0xffffffff
|
|
#define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
|
|
|
|
typedef struct _IO_STATUS_BLOCK
|
|
{
|
|
union
|
|
{
|
|
NTSTATUS Status;
|
|
PVOID Pointer;
|
|
};
|
|
ULONG_PTR Information;
|
|
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
|
|
|
|
typedef VOID (NTAPI *PIO_APC_ROUTINE)(
|
|
__in PVOID ApcContext,
|
|
__in PIO_STATUS_BLOCK IoStatusBlock,
|
|
__in ULONG Reserved
|
|
);
|
|
|
|
typedef enum _FILE_INFORMATION_CLASS
|
|
{
|
|
FileDirectoryInformation = 1,
|
|
FileFullDirectoryInformation,
|
|
FileBothDirectoryInformation,
|
|
FileBasicInformation,
|
|
FileStandardInformation,
|
|
FileInternalInformation,
|
|
FileEaInformation,
|
|
FileAccessInformation,
|
|
FileNameInformation,
|
|
FileRenameInformation,
|
|
FileLinkInformation,
|
|
FileNamesInformation,
|
|
FileDispositionInformation,
|
|
FilePositionInformation,
|
|
FileFullEaInformation,
|
|
FileModeInformation,
|
|
FileAlignmentInformation,
|
|
FileAllInformation,
|
|
FileAllocationInformation,
|
|
FileEndOfFileInformation,
|
|
FileAlternateNameInformation,
|
|
FileStreamInformation,
|
|
FilePipeInformation,
|
|
FilePipeLocalInformation,
|
|
FilePipeRemoteInformation,
|
|
FileMailslotQueryInformation,
|
|
FileMailslotSetInformation,
|
|
FileCompressionInformation,
|
|
FileObjectIdInformation,
|
|
FileCompletionInformation,
|
|
FileMoveClusterInformation,
|
|
FileQuotaInformation,
|
|
FileReparsePointInformation,
|
|
FileNetworkOpenInformation,
|
|
FileAttributeTagInformation,
|
|
FileTrackingInformation,
|
|
FileIdBothDirectoryInformation,
|
|
FileIdFullDirectoryInformation,
|
|
FileValidDataLengthInformation,
|
|
FileShortNameInformation,
|
|
FileIoCompletionNotificationInformation,
|
|
FileIoStatusBlockRangeInformation,
|
|
FileIoPriorityHintInformation,
|
|
FileSfioReserveInformation,
|
|
FileSfioVolumeInformation,
|
|
FileHardLinkInformation,
|
|
FileProcessIdsUsingFileInformation,
|
|
FileNormalizedNameInformation,
|
|
FileNetworkPhysicalNameInformation,
|
|
FileIdGlobalTxDirectoryInformation,
|
|
FileIsRemoteDeviceInformation,
|
|
FileAttributeCacheInformation,
|
|
FileNumaNodeInformation,
|
|
FileStandardLinkInformation,
|
|
FileRemoteProtocolInformation,
|
|
FileMaximumInformation
|
|
} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
|
|
|
|
typedef struct _FILE_BASIC_INFORMATION
|
|
{
|
|
LARGE_INTEGER CreationTime;
|
|
LARGE_INTEGER LastAccessTime;
|
|
LARGE_INTEGER LastWriteTime;
|
|
LARGE_INTEGER ChangeTime;
|
|
ULONG FileAttributes;
|
|
} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
|
|
|
|
typedef struct _FILE_STANDARD_INFORMATION
|
|
{
|
|
LARGE_INTEGER AllocationSize;
|
|
LARGE_INTEGER EndOfFile;
|
|
ULONG NumberOfLinks;
|
|
BOOLEAN DeletePending;
|
|
BOOLEAN Directory;
|
|
} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
|
|
|
|
typedef struct _FILE_POSITION_INFORMATION
|
|
{
|
|
LARGE_INTEGER CurrentByteOffset;
|
|
} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
|
|
|
|
typedef NTSTATUS (NTAPI *_NtDeleteFile)(
|
|
__in POBJECT_ATTRIBUTES ObjectAttributes
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtCreateFile)(
|
|
__out PHANDLE FileHandle,
|
|
__in ACCESS_MASK DesiredAccess,
|
|
__in POBJECT_ATTRIBUTES ObjectAttributes,
|
|
__out PIO_STATUS_BLOCK IoStatusBlock,
|
|
__in_opt PLARGE_INTEGER AllocationSize,
|
|
__in ULONG FileAttributes,
|
|
__in ULONG ShareAccess,
|
|
__in ULONG CreateDisposition,
|
|
__in ULONG CreateOptions,
|
|
__in_bcount_opt(EaLength) PVOID EaBuffer,
|
|
__in ULONG EaLength
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtCreateNamedPipeFile)(
|
|
__out PHANDLE FileHandle,
|
|
__in ULONG DesiredAccess,
|
|
__in POBJECT_ATTRIBUTES ObjectAttributes,
|
|
__out PIO_STATUS_BLOCK IoStatusBlock,
|
|
__in ULONG ShareAccess,
|
|
__in ULONG CreateDisposition,
|
|
__in ULONG CreateOptions,
|
|
__in ULONG NamedPipeType,
|
|
__in ULONG ReadMode,
|
|
__in ULONG CompletionMode,
|
|
__in ULONG MaximumInstances,
|
|
__in ULONG InboundQuota,
|
|
__in ULONG OutboundQuota,
|
|
__in_opt PLARGE_INTEGER DefaultTimeout
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtCreateMailslotFile)(
|
|
__out PHANDLE FileHandle,
|
|
__in ULONG DesiredAccess,
|
|
__in POBJECT_ATTRIBUTES ObjectAttributes,
|
|
__out PIO_STATUS_BLOCK IoStatusBlock,
|
|
__in ULONG CreateOptions,
|
|
__in ULONG MailslotQuota,
|
|
__in ULONG MaximumMessageSize,
|
|
__in PLARGE_INTEGER ReadTimeout
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtDeviceIoControlFile)(
|
|
__in HANDLE FileHandle,
|
|
__in_opt HANDLE Event,
|
|
__in_opt PIO_APC_ROUTINE ApcRoutine,
|
|
__in_opt PVOID ApcContext,
|
|
__out PIO_STATUS_BLOCK IoStatusBlock,
|
|
__in ULONG IoControlCode,
|
|
__in_bcount_opt(InputBufferLength) PVOID InputBuffer,
|
|
__in ULONG InputBufferLength,
|
|
__out_bcount_opt(OutputBufferLength) PVOID OutputBuffer,
|
|
__in ULONG OutputBufferLength
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtFsControlFile)(
|
|
__in HANDLE FileHandle,
|
|
__in_opt HANDLE Event,
|
|
__in_opt PIO_APC_ROUTINE ApcRoutine,
|
|
__in_opt PVOID ApcContext,
|
|
__out PIO_STATUS_BLOCK IoStatusBlock,
|
|
__in ULONG FsControlCode,
|
|
__in_bcount_opt(InputBufferLength) PVOID InputBuffer,
|
|
__in ULONG InputBufferLength,
|
|
__out_bcount_opt(OutputBufferLength) PVOID OutputBuffer,
|
|
__in ULONG OutputBufferLength
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtOpenFile)(
|
|
__out PHANDLE FileHandle,
|
|
__in ACCESS_MASK DesiredAccess,
|
|
__in POBJECT_ATTRIBUTES ObjectAttributes,
|
|
__out PIO_STATUS_BLOCK IoStatusBlock,
|
|
__in ULONG ShareAccess,
|
|
__in ULONG OpenOptions
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtQueryInformationFile)(
|
|
__in HANDLE FileHandle,
|
|
__out PIO_STATUS_BLOCK IoStatusBlock,
|
|
__out_bcount(Length) PVOID FileInformation,
|
|
__in ULONG Length,
|
|
__in FILE_INFORMATION_CLASS FileInformationClass
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtSetInformationFile)(
|
|
__in HANDLE FileHandle,
|
|
__out PIO_STATUS_BLOCK IoStatusBlock,
|
|
__in_bcount(Length) PVOID FileInformation,
|
|
__in ULONG Length,
|
|
__in FILE_INFORMATION_CLASS FileInformationClass
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtReadFile)(
|
|
__in HANDLE FileHandle,
|
|
__in_opt HANDLE Event,
|
|
__in_opt PIO_APC_ROUTINE ApcRoutine,
|
|
__in_opt PVOID ApcContext,
|
|
__out PIO_STATUS_BLOCK IoStatusBlock,
|
|
__out_bcount(Length) PVOID Buffer,
|
|
__in ULONG Length,
|
|
__in_opt PLARGE_INTEGER ByteOffset,
|
|
__in_opt PULONG Key
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtWriteFile)(
|
|
__in HANDLE FileHandle,
|
|
__in_opt HANDLE Event,
|
|
__in_opt PIO_APC_ROUTINE ApcRoutine,
|
|
__in_opt PVOID ApcContext,
|
|
__out PIO_STATUS_BLOCK IoStatusBlock,
|
|
__in_bcount(Length) PVOID Buffer,
|
|
__in ULONG Length,
|
|
__in_opt PLARGE_INTEGER ByteOffset,
|
|
__in_opt PULONG Key
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtLoadDriver)(
|
|
__in PUNICODE_STRING DriverServiceName
|
|
);
|
|
|
|
typedef NTSTATUS (NTAPI *_NtUnloadDriver)(
|
|
__in PUNICODE_STRING DriverServiceName
|
|
);
|
|
|
|
#ifndef IO_COMPLETION_QUERY_STATE
|
|
#define IO_COMPLETION_QUERY_STATE 0x0001
|
|
#endif
|
|
|
|
typedef enum _IO_COMPLETION_INFORMATION_CLASS
|
|
{
|
|
IoCompletionBasicInformation
|
|
} IO_COMPLETION_INFORMATION_CLASS;
|
|
|
|
typedef struct _IO_COMPLETION_BASIC_INFORMATION
|
|
{
|
|
LONG Depth;
|
|
} IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
|
|
|
|
typedef NTSTATUS (NTAPI *_NtQueryIoCompletion)(
|
|
__in HANDLE IoCompletionHandle,
|
|
__in IO_COMPLETION_INFORMATION_CLASS IoCompletionInformationClass,
|
|
__out_bcount(IoCompletionInformation) PVOID IoCompletionInformation,
|
|
__in ULONG IoCompletionInformationLength,
|
|
__out_opt PULONG ReturnLength
|
|
);
|
|
|
|
#endif
|