Reverted latest changes

svn path=/trunk/; revision=3474
This commit is contained in:
Casper Hornstrup
2002-09-08 10:47:47 +00:00
parent 17c0b5798e
commit 831938b9ee
64 changed files with 22607 additions and 0 deletions
+328
View File
@@ -0,0 +1,328 @@
#ifndef _NTOS_CCFUNCS_H
#define _NTOS_CCFUNCS_H
/* $Id: ccfuncs.h,v 1.8 2002/09/08 10:47:43 chorns Exp $ */
/* exported variables */
/*
CcFastMdlReadWait
CcFastReadNotPossible
CcFastReadWait
*/
BOOLEAN
STDCALL
CcCanIWrite (
IN PFILE_OBJECT FileObject,
IN ULONG BytesToWrite,
IN BOOLEAN Wait,
IN BOOLEAN Retrying
);
BOOLEAN
STDCALL
CcCopyRead (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN BOOLEAN Wait,
OUT PVOID Buffer,
OUT PIO_STATUS_BLOCK IoStatus
);
BOOLEAN
STDCALL
CcCopyWrite (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN BOOLEAN Wait,
IN PVOID Buffer
);
VOID
STDCALL
CcDeferWrite (
IN PFILE_OBJECT FileObject,
IN PCC_POST_DEFERRED_WRITE PostRoutine,
IN PVOID Context1,
IN PVOID Context2,
IN ULONG BytesToWrite,
IN BOOLEAN Retrying
);
BOOLEAN
STDCALL
CcFastCopyRead (
IN PFILE_OBJECT FileObject,
IN ULONG FileOffset,
IN ULONG Length,
IN ULONG PageCount,
OUT PVOID Buffer,
OUT PIO_STATUS_BLOCK IoStatus
);
BOOLEAN
STDCALL
CcFastCopyWrite (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN PVOID Buffer
);
VOID
STDCALL
CcFlushCache (
IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
IN PLARGE_INTEGER FileOffset OPTIONAL,
IN ULONG Length,
OUT PIO_STATUS_BLOCK IoStatus OPTIONAL
);
LARGE_INTEGER
STDCALL
CcGetDirtyPages (
IN PVOID LogHandle,
IN PDIRTY_PAGE_ROUTINE DirtyPageRoutine,
IN PVOID Context1,
IN PVOID Context2
);
PFILE_OBJECT
STDCALL
CcGetFileObjectFromBcb (
IN PVOID Bcb
);
PFILE_OBJECT
STDCALL
CcGetFileObjectFromSectionPtrs (
IN PSECTION_OBJECT_POINTERS SectionObjectPointer
);
LARGE_INTEGER
STDCALL
CcGetLsnForFileObject (
IN PFILE_OBJECT FileObject,
OUT PLARGE_INTEGER OldestLsn OPTIONAL
);
VOID
STDCALL
CcInitializeCacheMap (
IN PFILE_OBJECT FileObject,
IN PCC_FILE_SIZES FileSizes,
IN BOOLEAN PinAccess,
IN PCACHE_MANAGER_CALLBACKS CallBacks,
IN PVOID LazyWriterContext
);
BOOLEAN
STDCALL
CcIsThereDirtyData (
IN PVPB Vpb
);
BOOLEAN
STDCALL
CcMapData (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN BOOLEAN Wait,
OUT PVOID * Bcb,
OUT PVOID * Buffer
);
VOID
STDCALL
CcMdlRead (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
OUT PMDL * MdlChain,
OUT PIO_STATUS_BLOCK IoStatus
);
VOID
STDCALL
CcMdlReadComplete (
IN PFILE_OBJECT FileObject,
IN PMDL MdlChain
);
VOID
STDCALL
CcMdlWriteComplete (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN PMDL MdlChain
);
BOOLEAN
STDCALL
CcPinMappedData (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN BOOLEAN Wait,
OUT PVOID * Bcb
);
BOOLEAN
STDCALL
CcPinRead (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN BOOLEAN Wait,
OUT PVOID * Bcb,
OUT PVOID * Buffer
);
VOID
STDCALL
CcPrepareMdlWrite (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
OUT PMDL * MdlChain,
OUT PIO_STATUS_BLOCK IoStatus
);
BOOLEAN
STDCALL
CcPreparePinWrite (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN BOOLEAN Zero,
IN BOOLEAN Wait,
OUT PVOID * Bcb,
OUT PVOID * Buffer
);
BOOLEAN
STDCALL
CcPurgeCacheSection (
IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
IN PLARGE_INTEGER FileOffset OPTIONAL,
IN ULONG Length,
IN BOOLEAN UninitializeCacheMaps
);
#define CcReadAhead(FO,FOFF,LEN) \
{ \
if ((LEN) >= 256) \
{ \
CcScheduleReadAhead((FO),(FOFF),(LEN)); \
} \
}
VOID
STDCALL
CcRepinBcb (
IN PVOID Bcb
);
VOID
STDCALL
CcScheduleReadAhead (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length
);
VOID
STDCALL
CcSetAdditionalCacheAttributes (
IN PFILE_OBJECT FileObject,
IN BOOLEAN DisableReadAhead,
IN BOOLEAN DisableWriteBehind
);
VOID
STDCALL
CcSetBcbOwnerPointer (
IN PVOID Bcb,
IN PVOID Owner
);
VOID
STDCALL
CcSetDirtyPageThreshold (
IN PFILE_OBJECT FileObject,
IN ULONG DirtyPageThreshold
);
VOID
STDCALL
CcSetDirtyPinnedData (
IN PVOID Bcb,
IN PLARGE_INTEGER Lsn OPTIONAL
);
VOID
STDCALL
CcSetFileSizes (
IN PFILE_OBJECT FileObject,
IN PCC_FILE_SIZES FileSizes
);
VOID
STDCALL
CcSetLogHandleForFile (
IN PFILE_OBJECT FileObject,
IN PVOID LogHandle,
IN PFLUSH_TO_LSN FlushToLsnRoutine
);
VOID
STDCALL
CcSetReadAheadGranularity (
IN PFILE_OBJECT FileObject,
IN ULONG Granularity
);
BOOLEAN
STDCALL
CcUninitializeCacheMap (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER TruncateSize OPTIONAL,
IN PCACHE_UNINITIALIZE_EVENT UninitializeCompleteEvent OPTIONAL
);
VOID
STDCALL
CcUnpinData (
IN PVOID Bcb
);
VOID
STDCALL
CcUnpinDataForThread (
IN PVOID Bcb,
IN ERESOURCE_THREAD ResourceThreadId
);
VOID
STDCALL
CcUnpinRepinnedBcb (
IN PVOID Bcb,
IN BOOLEAN WriteThrough,
IN PIO_STATUS_BLOCK IoStatus
);
BOOLEAN
STDCALL
CcZeroData (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER StartOffset,
IN PLARGE_INTEGER EndOffset,
IN BOOLEAN Wait
);
#endif
/* EOF */
+86
View File
@@ -0,0 +1,86 @@
#ifndef __INCLUDE_DDK_CCTYPES_H
#define __INCLUDE_DDK_CCTYPES_H
typedef struct _CACHE_UNINITIALIZE_EVENT
{
struct _CACHE_UNINITIALIZE_EVENT * Next;
KEVENT Event;
} CACHE_UNINITIALIZE_EVENT, *PCACHE_UNINITIALIZE_EVENT;
typedef struct _CC_FILE_SIZES
{
LARGE_INTEGER AllocationSize;
LARGE_INTEGER FileSize;
LARGE_INTEGER ValidDataLength;
} CC_FILE_SIZES, *PCC_FILE_SIZES;
typedef VOID STDCALL
(*PCC_POST_DEFERRED_WRITE)(IN PVOID Context1,
IN PVOID Context2);
typedef struct _PUBLIC_BCB
{
CSHORT NodeTypeCode;
CSHORT NodeByteSize;
ULONG MappedLength;
LARGE_INTEGER MappedFileOffset;
} PUBLIC_BCB, *PPUBLIC_BCB;
typedef VOID (*PDIRTY_PAGE_ROUTINE) (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN PLARGE_INTEGER OldestLsn,
IN PLARGE_INTEGER NewestLsn,
IN PVOID Context1,
IN PVOID Context2
);
typedef BOOLEAN STDCALL
(*PACQUIRE_FOR_LAZY_WRITE)(IN PVOID Context,
IN BOOLEAN Wait);
typedef VOID STDCALL
(*PRELEASE_FROM_LAZY_WRITE)(IN PVOID Context);
typedef BOOLEAN STDCALL
(*PACQUIRE_FOR_READ_AHEAD)(IN PVOID Context,
IN BOOLEAN Wait);
typedef VOID STDCALL
(*PRELEASE_FROM_READ_AHEAD)(IN PVOID Context);
typedef struct _CACHE_MANAGER_CALLBACKS
{
PACQUIRE_FOR_LAZY_WRITE AcquireForLazyWrite;
PRELEASE_FROM_LAZY_WRITE ReleaseFromLazyWrite;
PACQUIRE_FOR_READ_AHEAD AcquireForReadAhead;
PRELEASE_FROM_READ_AHEAD ReleaseFromReadAhead;
} CACHE_MANAGER_CALLBACKS, *PCACHE_MANAGER_CALLBACKS;
/* this is already defined in iotypes.h */
/*
typedef struct _SECTION_OBJECT_POINTERS
{
PVOID DataSectionObject;
PVOID SharedCacheMap;
PVOID ImageSectionObject;
} SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
*/
typedef VOID STDCALL
(*PFLUSH_TO_LSN)(IN PVOID LogHandle,
IN LARGE_INTEGER Lsn);
typedef struct _REACTOS_COMMON_FCB_HEADER
{
CSHORT NodeTypeCode;
CSHORT NodeByteSize;
struct _BCB* Bcb;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER FileSize;
LARGE_INTEGER ValidDataLength;
} REACTOS_COMMON_FCB_HEADER, *PREACTOS_COMMON_FCB_HEADER;
#endif /* __INCLUDE_DDK_CCTYPES_H */
+47
View File
@@ -0,0 +1,47 @@
/*
* FUNCTION: Creates a registry key
* ARGUMENTS:
* KeyHandle (OUT) = Caller supplied storage for the resulting handle
* DesiredAccess = Specifies the allowed or desired access to the key
* It can have a combination of the following values:
* KEY_READ | KEY_WRITE | KEY_EXECUTE | KEY_ALL_ACCESS
* or
* KEY_QUERY_VALUE The values of the key can be queried.
* KEY_SET_VALUE The values of the key can be modified.
* KEY_CREATE_SUB_KEYS The key may contain subkeys.
* KEY_ENUMERATE_SUB_KEYS Subkeys can be queried.
* KEY_NOTIFY
* KEY_CREATE_LINK A symbolic link to the key can be created.
* ObjectAttributes = The name of the key may be specified directly in the name field
* of object attributes or relative to a key in rootdirectory.
* TitleIndex = Might specify the position in the sequential order of subkeys.
* Class = Specifies the kind of data, for example REG_SZ for string data. [ ??? ]
* CreateOptions = Specifies additional options with which the key is created
* REG_OPTION_VOLATILE The key is not preserved across boots.
* REG_OPTION_NON_VOLATILE The key is preserved accross boots.
* REG_OPTION_CREATE_LINK The key is a symbolic link to another key.
* REG_OPTION_BACKUP_RESTORE Key is being opened or created for backup/restore operations.
* Disposition = Indicates if the call to NtCreateKey resulted in the creation of a key it
* can have the following values: REG_CREATED_NEW_KEY | REG_OPENED_EXISTING_KEY
* RETURNS:
* Status
*/
NTSTATUS STDCALL
NtCreateKey(OUT PHANDLE KeyHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN ULONG TitleIndex,
IN PUNICODE_STRING Class OPTIONAL,
IN ULONG CreateOptions,
IN PULONG Disposition OPTIONAL);
NTSTATUS STDCALL
ZwCreateKey(OUT PHANDLE KeyHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN ULONG TitleIndex,
IN PUNICODE_STRING Class OPTIONAL,
IN ULONG CreateOptions,
IN PULONG Disposition OPTIONAL);
+100
View File
@@ -0,0 +1,100 @@
/*
* Object Manager structures and typedefs
*/
/*
* key query information class
*/
typedef enum _KEY_INFORMATION_CLASS
{
KeyBasicInformation,
KeyNodeInformation,
KeyFullInformation
} KEY_INFORMATION_CLASS;
typedef struct _KEY_BASIC_INFORMATION
{
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
ULONG NameLength;
WCHAR Name[1];
} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
typedef struct _KEY_FULL_INFORMATION
{
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
ULONG ClassOffset;
ULONG ClassLength;
ULONG SubKeys;
ULONG MaxNameLen;
ULONG MaxClassLen;
ULONG Values;
ULONG MaxValueNameLen;
ULONG MaxValueDataLen;
WCHAR Class[1];
} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
typedef struct _KEY_NODE_INFORMATION
{
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
ULONG ClassOffset;
ULONG ClassLength;
ULONG NameLength;
WCHAR Name[1];
} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
/* key set information class */
/*
* KeyWriteTimeInformation
*/
/* key value information class */
typedef enum _KEY_VALUE_INFORMATION_CLASS
{
KeyValueBasicInformation,
KeyValueFullInformation,
KeyValuePartialInformation
} KEY_VALUE_INFORMATION_CLASS;
typedef struct _KEY_VALUE_BASIC_INFORMATION
{
ULONG TitleIndex;
ULONG Type;
ULONG NameLength;
WCHAR Name[1];
} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
typedef struct _KEY_VALUE_FULL_INFORMATION
{
ULONG TitleIndex;
ULONG Type;
ULONG DataOffset;
ULONG DataLength;
ULONG NameLength;
WCHAR Name[1];
} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
ULONG TitleIndex;
ULONG Type;
ULONG DataLength;
UCHAR Data[1];
} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
/* used by [Nt/Zw]QueryMultipleValueKey */
typedef struct _KEY_VALUE_ENTRY
{
PUNICODE_STRING ValueName;
ULONG DataLength;
ULONG DataOffset;
ULONG Type;
} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
+23
View File
@@ -0,0 +1,23 @@
#ifndef __INCLUDE_DDK_DBGFUNCS_H
#define __INCLUDE_DDK_DBGFUNCS_H
/* $Id: dbgfuncs.h,v 1.7 2002/09/08 10:47:43 chorns Exp $ */
#define DBG_STATUS_CONTROL_C 1
#define DBG_STATUS_SYSRQ 2
#define DBG_STATUS_BUGCHECK_FIRST 3
#define DBG_STATUS_BUGCHECK_SECOND 4
#define DBG_STATUS_FATAL 5
VOID STDCALL DbgBreakPointWithStatus (ULONG Status);
VOID STDCALL DbgBreakPoint(VOID);
ULONG DbgPrint(PCH Format,...);
VOID STDCALL DbgPrompt (PCH OutputString, PCH InputString, USHORT InputSize);
#define DBG_GET_SHOW_FACILITY 0x0001
#define DBG_GET_SHOW_SEVERITY 0x0002
#define DBG_GET_SHOW_ERRCODE 0x0004
#define DBG_GET_SHOW_ERRTEXT 0x0008
VOID DbgGetErrorText(NTSTATUS ErrorCode, PUNICODE_STRING ErrorText, ULONG Flags);
VOID DbgPrintErrorMessage(NTSTATUS ErrorCode);
#endif /* __INCLUDE_DDK_DBGFUNCS_H */
+234
View File
@@ -0,0 +1,234 @@
#ifndef _DDK_DEFINES_H
#define _DDK_DEFINES_H
/* GENERAL DEFINITIONS ****************************************************/
#ifndef __ASM__
#define _WIN32_WINNT 0x0400
#include <ddk/kedef.h>
#include <ddk/iodef.h>
#define EXPORTED __declspec(dllexport)
#define IMPORTED __declspec(dllimport)
/*
* PURPOSE: Number of a thread priority levels
*/
#define NR_PRIORITY_LEVELS (32)
/*
* PURPOSE: Type of queue to insert a work item in
*/
enum
{
CriticalWorkQueue,
DelayedWorkQueue,
HyperCriticalWorkQueue,
};
/*
* Types of memory to allocate
*/
enum
{
NonPagedPool,
NonPagedPoolMustSucceed,
NonPagedPoolCacheAligned,
NonPagedPoolCacheAlignedMustS,
PagedPool,
PagedPoolCacheAligned,
};
/*
* This is a list of bug check types (not MS's)
*/
enum
{
APC_INDEX_MISMATCH = 1,
DEVICE_QUEUE_NOT_BUSY,
INVALID_AFFINITY_SET,
INVALID_DATA_ACCESS_TRAP,
INVALID_PROCESS_ATTACH_ATTEMPT,
INVALID_PROCESS_DEATTACH_ATTEMPT,
INVALID_SOFTWARE_INTERRUPT,
IRQL_NOT_DISPATCH_LEVEL,
IRQL_NOT_GREATER_OR_EQUAL,
NO_EXCEPTION_HANDLING_SUPPORT,
MAXIMUM_WAIT_OBJECTS_EXCEEDED,
MUTEX_LEVEL_NUMBER_VIOLATION,
NO_USER_MODE_CONTEXT,
SPIN_LOCK_ALREADY_OWNED,
SPIN_LOCK_NOT_OWNED,
THREAD_NOT_MUTEX_OWNER,
TRAP_CAUSE_UNKNOWN,
EMPTY_THREAD_REAPER_LIST,
CREATE_DELETE_LOCK_NOT_LOCKED,
LAST_CHANCE_CALLED_FROM_KMODE,
CID_HANDLE_CREATION,
CID_HANDLE_DELETION,
REFERENCE_BY_POINTER,
BAD_POOL_HEADER,
MEMORY_MANAGMENT,
PFN_SHARE_COUNT,
PFN_REFERENCE_COUNT,
NO_SPIN_LOCK_AVAILABLE,
KMODE_EXCEPTION_NOT_HANDLED,
SHARED_RESOURCE_CONV_ERROR,
KERNEL_APC_PENDING_DURING_EXIT,
QUOTA_UNDERFLOW,
FILE_SYSTEM,
FAT_FILE_SYSTEM,
NTFS_FILE_SYSTEM,
NPFS_FILE_SYSTEM,
CDFS_FILE_SYSTEM,
RDR_FILE_SYSTEM,
CORRUPT_ACCESS_TOKEN,
SECURITY_SYSTEM,
INCONSISTENT_IRP,
PANIC_STACK_SWITCH,
PORT_DRIVER_INTERNAL,
SCSI_DISK_DRIVER_INTERNAL,
INSTRUCTION_BUS_ERROR,
SET_OF_INVALID_CONTEXT,
PHASE0_INITIALIZATION_FAILED,
PHASE1_INITIALIZATION_FAILED,
UNEXPECTED_INITIALIZATION_CALL,
CACHE_MANAGER,
NO_MORE_IRP_STACK_LOCATIONS,
DEVICE_REFERENCE_COUNT_NOT_ZERO,
FLOPPY_INTERNAL_ERROR,
SERIAL_DRIVER_INTERNAL,
SYSTEM_EXIT_OWNED_MUTEX,
SYSTEM_UNWIND_PREVIOUS_USER,
SYSTEN_SERVICE_EXCEPTION,
INTERRUPT_UNWIND_ATTEMPTED,
INTERRUPT_EXCEPTION_NOT_HANDLED,
MULTIPROCESSOR_CONFIGURATION_NOT_SUPPORTED,
NO_MORE_SYSTEM_PTES,
TARGET_MDL_TOO_SMALL,
MUST_SUCCEED_POOL_EMPTY,
ATDISK_DRIVER_INTERNAL,
NO_SUCH_PARTITION,
MULTIPLE_IRP_COMPLETE_REQUESTS,
INSUFFICENT_SYSTEM_MAP_PAGES,
DEREF_UNKNOWN_LOGON_SERVICE,
REF_UNKNOWN_LOGON_SERVICE,
CANCEL_STATE_IN_COMPLETED_IRP,
PAGE_FAULT_WITH_INTERRUPTS_OFF,
IRQL_GT_ZERO_AT_SYSTEM_SERVICE,
STREAMS_INTERNAL_ERROR,
FATAL_UNHANDLED_HARD_ERROR,
NO_PAGES_AVAILABLE,
PFN_LIST_CORRUPT,
NDIS_INTERNAL_ERROR,
PAGE_FAULT_IN_NONPAGED_AREA,
REGISTRY_ERROR,
MAILSLOT_FILE_SYSTEM,
NO_BOOT_DEVICE,
LM_SERVER_INTERNAL_ERROR,
DATA_COHERENCY_EXCEPTION,
INSTRUCTION_COHERENCY_EXCEPTION,
XNS_INTERNAL_ERROR,
FTDISK_INTERNAL_ERROR,
PINBALL_FILE_SYSTEM,
CRITICAL_SERVICE_FAILED,
SET_ENV_VAR_FAILED,
HAL_INITIALIZED_FAILED,
UNSUPPORTED_PROCESSOR,
OBJECT_INITIALIZATION_FAILED,
SECURITY_INITIALIZATION_FAILED,
PROCESS_INITIALIZATION_FAILED,
HAL1_INITIALIZATION_FAILED,
};
enum
{
KBUG_NONE,
KBUG_ORPHANED_IRP,
KBUG_IO_STACK_OVERFLOW,
KBUG_OUT_OF_MEMORY,
KBUG_POOL_FREE_LIST_CORRUPT,
/*
* These are well known but the actual value is unknown
*/
// NO_PAGES_AVAILABLE,
/*
* These are well known (MS) bug types
* (Reference: NT Insider 1997 - http://www.osr.com)
*/
IRQL_NOT_LESS_OR_EQUAL = 0xa,
// KMODE_EXCEPTION_NOT_HANDLED = 0x1e,
UNEXPECTED_KERNEL_MODE_TRAP = 0x7f,
PAGE_FAULT_IN_NON_PAGED_AREA = 0x50,
};
/*
* PURPOSE: Object attributes
*/
enum
{
OBJ_INHERIT = 0x2,
OBJ_PERMANENT = 0x10,
OBJ_EXCLUSIVE = 0x20,
OBJ_CASE_INSENSITIVE = 0x40,
OBJ_OPENIF = 0x80,
OBJ_OPENLINK = 0x100,
OBJ_VALID_ATTRIBUTES = 0x1F2,
};
/*
* PURPOSE: Timer types
*/
enum
{
NotificationTimer,
SynchronizationTimer,
};
/*
* PURPOSE: Some drivers use these
*/
#ifndef IN
#define IN
#define OUT
#define OPTIONAL
#endif
/*
* PURPOSE: Arguments to MmProbeAndLockPages
*/
enum
{
IoReadAccess,
IoWriteAccess,
IoModifyAccess,
};
#define MAXIMUM_VOLUME_LABEL_LENGTH (32)
#include <ddk/i386/irql.h>
#define PASSIVE_LEVEL 0 // Passive release level
#define LOW_LEVEL 0 // Lowest interrupt level
#define APC_LEVEL 1 // APC interrupt level
#define DISPATCH_LEVEL 2 // Dispatcher level
/* timer used for profiling */
#define PROFILE_LEVEL 27
/* Interval clock 1 level - Not used on x86 */
#define CLOCK1_LEVEL 28
#define CLOCK2_LEVEL 28 // Interval clock 2 level
#define IPI_LEVEL 29 // Interprocessor interrupt level
#define POWER_LEVEL 30 // Power failure level
#define HIGH_LEVEL 31 // Highest interrupt level
#define SYNCH_LEVEL (IPI_LEVEL-1) // synchronization level
#endif /* __ASM__ */
/* Values returned by KeGetPreviousMode() */
#define KernelMode (0)
#define UserMode (1)
#endif /* ndef _DDK_DEFINES_H */
+912
View File
@@ -0,0 +1,912 @@
#ifndef _NTOS_EXFUNCS_H
#define _NTOS_EXFUNCS_H
/* EXECUTIVE ROUTINES ******************************************************/
#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
VOID
FASTCALL
ExAcquireFastMutex (
PFAST_MUTEX FastMutex
);
VOID
FASTCALL
ExAcquireFastMutexUnsafe (
PFAST_MUTEX FastMutex
);
BOOLEAN
STDCALL
ExAcquireResourceExclusive (
PERESOURCE Resource,
BOOLEAN Wait
);
BOOLEAN
STDCALL
ExAcquireResourceExclusiveLite (
PERESOURCE Resource,
BOOLEAN Wait
);
BOOLEAN
STDCALL
ExAcquireResourceSharedLite (
PERESOURCE Resource,
BOOLEAN Wait
);
BOOLEAN
STDCALL
ExAcquireSharedStarveExclusive (
PERESOURCE Resource,
BOOLEAN Wait
);
BOOLEAN
STDCALL
ExAcquireSharedWaitForExclusive (
PERESOURCE Resource,
BOOLEAN Wait
);
PVOID
STDCALL
ExAllocateFromZone (
PZONE_HEADER Zone
);
/*
* PVOID
* ExAllocateFromZone (
* PZONE_HEADER Zone
* );
*
* FUNCTION:
* Allocate a block from a zone
*
* ARGUMENTS:
* Zone = Zone to allocate from
*
* RETURNS:
* The base address of the block allocated
*/
#define ExAllocateFromZone(Zone) \
(PVOID)((Zone)->FreeList.Next); \
if ((Zone)->FreeList.Next) \
(Zone)->FreeList.Next = (Zone)->FreeList.Next->Next
/*
* FUNCTION: Allocates memory from the nonpaged pool
* ARGUMENTS:
* NumberOfBytes = minimum size of the block to be allocated
* PoolType = the type of memory to use for the block (ignored)
* RETURNS:
* the address of the block if it succeeds
*/
PVOID
STDCALL
ExAllocatePool (
IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes
);
PVOID
STDCALL
ExAllocatePoolWithQuota (
IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes
);
PVOID
STDCALL
ExAllocatePoolWithQuotaTag (
IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes,
IN ULONG Tag
);
PVOID
STDCALL
ExAllocatePoolWithTag (
IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes,
IN ULONG Tag
);
VOID
STDCALL
ExConvertExclusiveToSharedLite (
PERESOURCE Resource
);
NTSTATUS
STDCALL
ExCreateCallback (
OUT PCALLBACK_OBJECT * CallbackObject,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN BOOLEAN Create,
IN BOOLEAN AllowMultipleCallbacks
);
NTSTATUS
STDCALL
ExDeleteResource (
PERESOURCE Resource
);
NTSTATUS
STDCALL
ExDeleteResourceLite (
PERESOURCE Resource
);
VOID
STDCALL
ExDisableResourceBoostLite (
PERESOURCE Resource
);
NTSTATUS
STDCALL
ExExtendZone (
PZONE_HEADER Zone,
PVOID Segment,
ULONG SegmentSize
);
/*
* FUNCTION: Releases previously allocated memory
* ARGUMENTS:
* block = block to free
*/
VOID
STDCALL
ExFreePool (
PVOID block
);
/*
* PVOID
* ExFreeToZone (
* PZONE_HEADER Zone,
* PVOID Block
* );
*
* FUNCTION:
* Frees a block from a zone
*
* ARGUMENTS:
* Zone = Zone the block was allocated from
* Block = Block to free
*/
#define ExFreeToZone(Zone,Block) \
(((PSINGLE_LIST_ENTRY)(Block))->Next = (Zone)->FreeList.Next, \
(Zone)->FreeList.Next = ((PSINGLE_LIST_ENTRY)(Block)), \
((PSINGLE_LIST_ENTRY)(Block))->Next)
/*
* ERESOURCE_THREAD
* ExGetCurrentResourceThread (
* VOID
* );
*/
#define ExGetCurrentResourceThread() \
((ERESOURCE_THREAD)PsGetCurrentThread())
ULONG
STDCALL
ExGetExclusiveWaiterCount (
PERESOURCE Resource
);
ULONG
STDCALL
ExGetPreviousMode (
VOID
);
ULONG
STDCALL
ExGetSharedWaiterCount (
PERESOURCE Resource
);
/*
* VOID
* ExInitializeFastMutex (
* PFAST_MUTEX FastMutex
* );
*/
#define ExInitializeFastMutex(_FastMutex) \
((PFAST_MUTEX)_FastMutex)->Count = 1; \
((PFAST_MUTEX)_FastMutex)->Owner = NULL; \
((PFAST_MUTEX)_FastMutex)->Contention = 0; \
KeInitializeEvent(&((PFAST_MUTEX)_FastMutex)->Event, \
SynchronizationEvent, \
FALSE);
NTSTATUS
STDCALL
ExInitializeResource (
PERESOURCE Resource
);
NTSTATUS
STDCALL
ExInitializeResourceLite (
PERESOURCE Resource
);
/*
* VOID
* ExInitializeSListHead (
* PSLIST_HEADER SListHead
* );
*/
#define ExInitializeSListHead(ListHead) \
(ListHead)->Alignment = 0
/*
* VOID
* ExInitializeWorkItem (
* PWORK_QUEUE_ITEM Item,
* PWORKER_THREAD_ROUTINE Routine,
* PVOID Context
* );
*
* FUNCTION:
* Initializes a work item to be processed by one of the system
* worker threads
*
* ARGUMENTS:
* Item = Pointer to the item to be initialized
* Routine = Routine to be called by the worker thread
* Context = Parameter to be passed to the callback
*/
#define ExInitializeWorkItem(Item, WorkerRoutine, RoutineContext) \
ASSERT_IRQL(DISPATCH_LEVEL); \
(Item)->Routine = (WorkerRoutine); \
(Item)->Context = (RoutineContext); \
(Item)->Entry.Flink = NULL; \
(Item)->Entry.Blink = NULL;
NTSTATUS
STDCALL
ExInitializeZone (
PZONE_HEADER Zone,
ULONG BlockSize,
PVOID InitialSegment,
ULONG InitialSegmentSize
);
LARGE_INTEGER
STDCALL
ExInterlockedAddLargeInteger (
PLARGE_INTEGER Addend,
LARGE_INTEGER Increment,
PKSPIN_LOCK Lock
);
VOID
FASTCALL
ExInterlockedAddLargeStatistic (
IN PLARGE_INTEGER Addend,
IN ULONG Increment
);
ULONG
STDCALL
ExInterlockedAddUlong (
PULONG Addend,
ULONG Increment,
PKSPIN_LOCK Lock
);
/*
* PVOID
* STDCALL
* ExInterlockedAllocateFromZone (
* PZONE_HEADER Zone,
* PKSPIN_LOCK Lock
* );
*/
#define ExInterlockedAllocateFromZone(Zone,Lock) \
(PVOID)ExInterlockedPopEntryList(&(Zone)->FreeList,Lock)
LONGLONG
FASTCALL
ExInterlockedCompareExchange64 (
IN OUT PLONGLONG Destination,
IN PLONGLONG Exchange,
IN PLONGLONG Comparand,
IN PKSPIN_LOCK Lock
);
INTERLOCKED_RESULT
STDCALL
ExInterlockedDecrementLong (
PLONG Addend,
PKSPIN_LOCK Lock
);
ULONG
STDCALL
ExInterlockedExchangeUlong (
PULONG Target,
ULONG Value,
PKSPIN_LOCK Lock
);
NTSTATUS
STDCALL
ExInterlockedExtendZone (
PZONE_HEADER Zone,
PVOID Segment,
ULONG SegmentSize,
PKSPIN_LOCK Lock
);
/*
* PVOID
* ExInterlockedFreeToZone (
* PZONE_HEADER Zone,
* PVOID Block,
* PKSPIN_LOCK Lock
* );
*/
#define ExInterlockedFreeToZone(Zone,Block,Lock) \
ExInterlockedPushEntryList(&(Zone)->FreeList,((PSINGLE_LIST_ENTRY)(Block)),(Lock))
INTERLOCKED_RESULT
STDCALL
ExInterlockedIncrementLong (
PLONG Addend,
PKSPIN_LOCK Lock
);
PLIST_ENTRY
STDCALL
ExInterlockedInsertHeadList (
PLIST_ENTRY ListHead,
PLIST_ENTRY ListEntry,
PKSPIN_LOCK Lock
);
PLIST_ENTRY
STDCALL
ExInterlockedInsertTailList (
PLIST_ENTRY ListHead,
PLIST_ENTRY ListEntry,
PKSPIN_LOCK Lock
);
PSINGLE_LIST_ENTRY
STDCALL
ExInterlockedPopEntryList (
PSINGLE_LIST_ENTRY ListHead,
PKSPIN_LOCK Lock
);
PSINGLE_LIST_ENTRY
FASTCALL
ExInterlockedPopEntrySList (
PSLIST_HEADER ListHead,
PKSPIN_LOCK Lock
);
PSINGLE_LIST_ENTRY
STDCALL
ExInterlockedPushEntryList (
PSINGLE_LIST_ENTRY ListHead,
PSINGLE_LIST_ENTRY ListEntry,
PKSPIN_LOCK Lock
);
PSINGLE_LIST_ENTRY
FASTCALL
ExInterlockedPushEntrySList (
PSLIST_HEADER ListHead,
PSINGLE_LIST_ENTRY ListEntry,
PKSPIN_LOCK Lock
);
VOID
ExInterlockedRemoveEntryList (
PLIST_ENTRY ListHead,
PLIST_ENTRY Entry,
PKSPIN_LOCK Lock
);
PLIST_ENTRY
STDCALL
ExInterlockedRemoveHeadList (
PLIST_ENTRY Head,
PKSPIN_LOCK Lock
);
/*
* BOOLEAN
* ExIsFullZone (
* PZONE_HEADER Zone
* );
*/
#define ExIsFullZone(Zone) \
((Zone)->FreeList.Next==(PSINGLE_LIST_ENTRY)NULL)
/*
* BOOLEAN
* ExIsObjectInFirstZoneSegment (
* PZONE_HEADER Zone,
* PVOID Object
* );
*/
#define ExIsObjectInFirstZoneSegment(Zone,Object) \
(((PUCHAR)(Object)>=(PUCHAR)(Zone)->SegmentList.Next) && \
((PUCHAR)(Object)<(PUCHAR)(Zone)->SegmentList.Next+(Zone)->TotalSegmentSize))
BOOLEAN
STDCALL
ExIsProcessorFeaturePresent (
IN ULONG ProcessorFeature
);
BOOLEAN
STDCALL
ExIsResourceAcquiredExclusiveLite (
PERESOURCE Resource
);
ULONG
STDCALL
ExIsResourceAcquiredSharedLite (
PERESOURCE Resource
);
VOID
STDCALL
ExLocalTimeToSystemTime (
PLARGE_INTEGER LocalTime,
PLARGE_INTEGER SystemTime
);
VOID
STDCALL
ExNotifyCallback (
IN PVOID CallbackObject,
IN PVOID Argument1,
IN PVOID Argument2
);
VOID
STDCALL
ExPostSystemEvent (
ULONG Unknown1,
ULONG Unknown2,
ULONG Unknown3
);
/*
* USHORT
* ExQueryDepthSList (
* PSLIST_HEADER SListHead
* );
*/
#define ExQueryDepthSList(ListHead) \
(USHORT)(ListHead)->s.Depth
VOID
STDCALL
ExQueueWorkItem (
PWORK_QUEUE_ITEM WorkItem,
WORK_QUEUE_TYPE QueueType
);
VOID
STDCALL
ExRaiseAccessViolation (
VOID
);
VOID
STDCALL
ExRaiseDatatypeMisalignment (
VOID
);
VOID
STDCALL
ExRaiseStatus (
NTSTATUS Status
);
PVOID
STDCALL
ExRegisterCallback (
IN PCALLBACK_OBJECT CallbackObject,
IN PCALLBACK_FUNCTION CallbackFunction,
IN PVOID CallbackContext
);
VOID
STDCALL
ExReinitializeResourceLite (
PERESOURCE Resource
);
/* ReactOS Specific: begin */
VOID
FASTCALL
ExReleaseFastMutex (
PFAST_MUTEX Mutex
);
/* ReactOS Specific: end */
VOID
FASTCALL
ExReleaseFastMutexUnsafe (
PFAST_MUTEX Mutex
);
/*
VOID
STDCALL
ExReleaseResource (
PERESOURCE Resource
);
*/
#define ExReleaseResource(Resource) \
(ExReleaseResourceLite (Resource))
VOID
FASTCALL
ExReleaseResourceLite (
PERESOURCE Resource
);
VOID
STDCALL
ExReleaseResourceForThread (
PERESOURCE Resource,
ERESOURCE_THREAD ResourceThreadId
);
VOID
STDCALL
ExReleaseResourceForThreadLite (
PERESOURCE Resource,
ERESOURCE_THREAD ResourceThreadId
);
VOID
STDCALL
ExSetResourceOwnerPointer (
IN PERESOURCE Resource,
IN PVOID OwnerPointer
);
VOID
STDCALL
ExSystemTimeToLocalTime (
PLARGE_INTEGER SystemTime,
PLARGE_INTEGER LocalTime
);
BOOLEAN
FASTCALL
ExTryToAcquireFastMutex (
PFAST_MUTEX FastMutex
);
BOOLEAN
STDCALL
ExTryToAcquireResourceExclusiveLite (
PERESOURCE Resource
);
VOID
STDCALL
ExUnregisterCallback (
IN PVOID CallbackRegistration
);
/*
* PVOID
* ExAllocateFromNPagedLookasideList (
* PNPAGED_LOOKASIDE_LIST LookSide
* );
*
* FUNCTION:
* Removes (pops) the first entry from the specified nonpaged
* lookaside list.
*
* ARGUMENTS:
* Lookaside = Pointer to a nonpaged lookaside list
*
* RETURNS:
* Address of the allocated list entry
*/
static
inline
PVOID
ExAllocateFromNPagedLookasideList (
IN PNPAGED_LOOKASIDE_LIST Lookaside
)
{
PVOID Entry;
Lookaside->TotalAllocates++;
Entry = ExInterlockedPopEntrySList (&Lookaside->ListHead,
&Lookaside->Lock);
if (Entry == NULL)
{
Lookaside->AllocateMisses++;
Entry = (Lookaside->Allocate)(Lookaside->Type,
Lookaside->Size,
Lookaside->Tag);
}
return Entry;
}
PVOID
STDCALL
ExAllocateFromPagedLookasideList (
PPAGED_LOOKASIDE_LIST LookSide
);
VOID
STDCALL
ExDeleteNPagedLookasideList (
PNPAGED_LOOKASIDE_LIST Lookaside
);
VOID
STDCALL
ExDeletePagedLookasideList (
PPAGED_LOOKASIDE_LIST Lookaside
);
/*
* VOID
* ExFreeToNPagedLookasideList (
* PNPAGED_LOOKASIDE_LIST Lookaside,
* PVOID Entry
* );
*
* FUNCTION:
* Inserts (pushes) the specified entry into the specified
* nonpaged lookaside list.
*
* ARGUMENTS:
* Lookaside = Pointer to the nonpaged lookaside list
* Entry = Pointer to the entry that is inserted in the lookaside list
*/
static
inline
VOID
ExFreeToNPagedLookasideList (
IN PNPAGED_LOOKASIDE_LIST Lookaside,
IN PVOID Entry
)
{
Lookaside->TotalFrees++;
if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->MinimumDepth)
{
Lookaside->FreeMisses++;
(Lookaside->Free)(Entry);
}
else
{
ExInterlockedPushEntrySList (&Lookaside->ListHead,
(PSINGLE_LIST_ENTRY)Entry,
&Lookaside->Lock);
}
}
VOID
STDCALL
ExFreeToPagedLookasideList (
PPAGED_LOOKASIDE_LIST Lookaside,
PVOID Entry
);
VOID
STDCALL
ExInitializeNPagedLookasideList (
PNPAGED_LOOKASIDE_LIST Lookaside,
PALLOCATE_FUNCTION Allocate,
PFREE_FUNCTION Free,
ULONG Flags,
ULONG Size,
ULONG Tag,
USHORT Depth
);
VOID
STDCALL
ExInitializePagedLookasideList (
PPAGED_LOOKASIDE_LIST Lookaside,
PALLOCATE_FUNCTION Allocate,
PFREE_FUNCTION Free,
ULONG Flags,
ULONG Size,
ULONG Tag,
USHORT Depth
);
ULONG FASTCALL
ExfInterlockedAddUlong(IN PULONG Addend,
IN ULONG Increment,
IN PKSPIN_LOCK Lock);
PLIST_ENTRY FASTCALL
ExfInterlockedInsertHeadList(IN PLIST_ENTRY ListHead,
IN PLIST_ENTRY ListEntry,
IN PKSPIN_LOCK Lock);
PLIST_ENTRY FASTCALL
ExfInterlockedInsertTailList(IN PLIST_ENTRY ListHead,
IN PLIST_ENTRY ListEntry,
IN PKSPIN_LOCK Lock);
PSINGLE_LIST_ENTRY FASTCALL
ExfInterlockedPopEntryList(IN PSINGLE_LIST_ENTRY ListHead,
IN PKSPIN_LOCK Lock);
PSINGLE_LIST_ENTRY FASTCALL
ExfInterlockedPushEntryList(IN PSINGLE_LIST_ENTRY ListHead,
IN PSINGLE_LIST_ENTRY ListEntry,
IN PKSPIN_LOCK Lock);
PLIST_ENTRY FASTCALL
ExfInterlockedRemoveHeadList(IN PLIST_ENTRY Head,
IN PKSPIN_LOCK Lock);
INTERLOCKED_RESULT FASTCALL
Exfi386InterlockedIncrementLong(IN PLONG Addend);
INTERLOCKED_RESULT FASTCALL
Exfi386InterlockedDecrementLong(IN PLONG Addend);
ULONG FASTCALL
Exfi386InterlockedExchangeUlong(IN PULONG Target,
IN ULONG Value);
INTERLOCKED_RESULT STDCALL
Exi386InterlockedIncrementLong(IN PLONG Addend);
INTERLOCKED_RESULT STDCALL
Exi386InterlockedDecrementLong(IN PLONG Addend);
ULONG STDCALL
Exi386InterlockedExchangeUlong(IN PULONG Target,
IN ULONG Value);
LONG
FASTCALL
InterlockedCompareExchange (
PLONG Destination,
LONG Exchange,
LONG Comperand
);
#ifdef _GNU_H_WINDOWS_H
#ifdef InterlockedDecrement
#undef InterlockedDecrement
#undef InterlockedExchange
#undef InterlockedExchangeAdd
#undef InterlockedIncrement
#endif /* def InterlockedDecrement */
#endif /* def _GNU_H_WINDOWS_H */
LONG
FASTCALL
InterlockedDecrement (
PLONG Addend
);
LONG
FASTCALL
InterlockedExchange (
PLONG Target,
LONG Value
);
LONG
FASTCALL
InterlockedExchangeAdd (
PLONG Addend,
LONG Value
);
LONG
FASTCALL
InterlockedIncrement (
PLONG Addend
);
/*---*/
typedef
unsigned int
(exception_hook) (
CONTEXT * c,
unsigned int exp
);
unsigned int
ExHookException (
exception_hook fn,
unsigned int exp
);
/* BEGIN REACTOS ONLY */
BOOLEAN STDCALL
ExInitializeBinaryTree(IN PBINARY_TREE Tree,
IN PKEY_COMPARATOR Compare,
IN BOOLEAN UseNonPagedPool);
VOID STDCALL
ExDeleteBinaryTree(IN PBINARY_TREE Tree);
VOID STDCALL
ExInsertBinaryTree(IN PBINARY_TREE Tree,
IN PVOID Key,
IN PVOID Value);
BOOLEAN STDCALL
ExSearchBinaryTree(IN PBINARY_TREE Tree,
IN PVOID Key,
OUT PVOID * Value);
BOOLEAN STDCALL
ExRemoveBinaryTree(IN PBINARY_TREE Tree,
IN PVOID Key,
IN PVOID * Value);
BOOLEAN STDCALL
ExTraverseBinaryTree(IN PBINARY_TREE Tree,
IN TRAVERSE_METHOD Method,
IN PTRAVERSE_ROUTINE Routine,
IN PVOID Context);
BOOLEAN STDCALL
ExInitializeSplayTree(IN PSPLAY_TREE Tree,
IN PKEY_COMPARATOR Compare,
IN BOOLEAN Weighted,
IN BOOLEAN UseNonPagedPool);
VOID STDCALL
ExDeleteSplayTree(IN PSPLAY_TREE Tree);
VOID STDCALL
ExInsertSplayTree(IN PSPLAY_TREE Tree,
IN PVOID Key,
IN PVOID Value);
BOOLEAN STDCALL
ExSearchSplayTree(IN PSPLAY_TREE Tree,
IN PVOID Key,
OUT PVOID * Value);
BOOLEAN STDCALL
ExRemoveSplayTree(IN PSPLAY_TREE Tree,
IN PVOID Key,
IN PVOID * Value);
BOOLEAN STDCALL
ExWeightOfSplayTree(IN PSPLAY_TREE Tree,
OUT PULONG Weight);
BOOLEAN STDCALL
ExTraverseSplayTree(IN PSPLAY_TREE Tree,
IN TRAVERSE_METHOD Method,
IN PTRAVERSE_ROUTINE Routine,
IN PVOID Context);
BOOLEAN STDCALL
ExInitializeHashTable(IN PHASH_TABLE HashTable,
IN ULONG HashTableSize,
IN PKEY_COMPARATOR Compare OPTIONAL,
IN BOOLEAN UseNonPagedPool);
VOID STDCALL
ExDeleteHashTable(IN PHASH_TABLE HashTable);
VOID STDCALL
ExInsertHashTable(IN PHASH_TABLE HashTable,
IN PVOID Key,
IN ULONG KeyLength,
IN PVOID Value);
BOOLEAN STDCALL
ExSearchHashTable(IN PHASH_TABLE HashTable,
IN PVOID Key,
IN ULONG KeyLength,
OUT PVOID * Value);
BOOLEAN STDCALL
ExRemoveHashTable(IN PHASH_TABLE HashTable,
IN PVOID Key,
IN ULONG KeyLength,
IN PVOID * Value);
/* END REACTOS ONLY */
#endif /* ndef _NTOS_EXFUNCS_H */
+238
View File
@@ -0,0 +1,238 @@
/* $Id: extypes.h,v 1.11 2002/09/08 10:47:43 chorns Exp $ */
#ifndef __INCLUDE_DDK_EXTYPES_H
#define __INCLUDE_DDK_EXTYPES_H
#ifdef __NTOSKRNL__
extern POBJECT_TYPE EXPORTED ExDesktopObjectType;
extern POBJECT_TYPE EXPORTED ExEventObjectType;
extern POBJECT_TYPE EXPORTED ExWindowStationObjectType;
#else
extern POBJECT_TYPE IMPORTED ExDesktopObjectType;
extern POBJECT_TYPE IMPORTED ExEventObjectType;
extern POBJECT_TYPE IMPORTED ExWindowStationObjectType;
#endif
typedef ULONG INTERLOCKED_RESULT;
typedef ULONG WORK_QUEUE_TYPE;
typedef ULONG ERESOURCE_THREAD, *PERESOURCE_THREAD;
typedef struct _OWNER_ENTRY
{
ERESOURCE_THREAD OwnerThread;
union
{
LONG OwnerCount;
ULONG TableSize;
} a;
} OWNER_ENTRY, *POWNER_ENTRY;
typedef struct _ERESOURCE
{
LIST_ENTRY SystemResourcesList;
POWNER_ENTRY OwnerTable;
SHORT ActiveCount;
USHORT Flag;
PKSEMAPHORE SharedWaiters;
PKEVENT ExclusiveWaiters;
OWNER_ENTRY OwnerThreads[2];
ULONG ContentionCount;
USHORT NumberOfSharedWaiters;
USHORT NumberOfExclusiveWaiters;
union
{
PVOID Address;
ULONG CreatorBackTraceIndex;
} a;
KSPIN_LOCK SpinLock;
} ERESOURCE, *PERESOURCE;
typedef struct
{
LONG Count;
struct _KTHREAD* Owner;
ULONG Contention;
KEVENT Event;
ULONG OldIrql;
} FAST_MUTEX, *PFAST_MUTEX;
typedef struct _ZONE_HEADER
{
SINGLE_LIST_ENTRY FreeList;
SINGLE_LIST_ENTRY SegmentList;
ULONG BlockSize;
ULONG TotalSegmentSize;
} ZONE_HEADER, *PZONE_HEADER;
typedef struct _ZONE_SEGMENT
{
SINGLE_LIST_ENTRY Entry;
ULONG size;
} ZONE_SEGMENT, *PZONE_SEGMENT;
typedef struct _ZONE_ENTRY
{
SINGLE_LIST_ENTRY Entry;
} ZONE_ENTRY, *PZONE_ENTRY;
typedef VOID STDCALL
(*PWORKER_THREAD_ROUTINE)(PVOID Parameter);
typedef struct _WORK_QUEUE_ITEM
{
LIST_ENTRY Entry;
PWORKER_THREAD_ROUTINE Routine;
PVOID Context;
} WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
typedef PVOID STDCALL
(*PALLOCATE_FUNCTION)(POOL_TYPE PoolType,
ULONG NumberOfBytes,
ULONG Tag);
typedef VOID STDCALL
(*PFREE_FUNCTION)(PVOID Buffer);
typedef union _SLIST_HEADER
{
ULONGLONG Alignment;
struct
{
SINGLE_LIST_ENTRY Next;
USHORT Depth;
USHORT Sequence;
} s;
} SLIST_HEADER, *PSLIST_HEADER;
typedef struct _NPAGED_LOOKASIDE_LIST
{
SLIST_HEADER ListHead;
USHORT MinimumDepth;
USHORT MaximumDepth;
ULONG TotalAllocates;
ULONG AllocateMisses;
ULONG TotalFrees;
ULONG FreeMisses;
POOL_TYPE Type;
ULONG Tag;
ULONG Size;
PALLOCATE_FUNCTION Allocate;
PFREE_FUNCTION Free;
LIST_ENTRY ListEntry;
ULONG LastTotalAllocates;
ULONG LastAllocateMisses;
ULONG Pad[2];
KSPIN_LOCK Lock;
} NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
typedef struct _PAGED_LOOKASIDE_LIST
{
SLIST_HEADER ListHead;
USHORT MinimumDepth;
USHORT MaximumDepth;
ULONG TotalAllocates;
ULONG AllocateMisses;
ULONG TotalFrees;
ULONG FreeMisses;
POOL_TYPE Type;
ULONG Tag;
ULONG Size;
PALLOCATE_FUNCTION Allocate;
PFREE_FUNCTION Free;
LIST_ENTRY ListEntry;
ULONG LastTotalAllocates;
ULONG LastAllocateMisses;
FAST_MUTEX Lock;
} PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
/* callback object (not functional in NT4)*/
typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
typedef VOID STDCALL
(*PCALLBACK_FUNCTION)(PVOID CallbackContext,
PVOID Argument1,
PVOID Argument2);
/* BEGIN REACTOS ONLY */
typedef enum _TRAVERSE_METHOD {
TraverseMethodPreorder,
TraverseMethodInorder,
TraverseMethodPostorder
} TRAVERSE_METHOD;
typedef LONG STDCALL
(*PKEY_COMPARATOR)(IN PVOID Key1,
IN PVOID Key2);
typedef BOOLEAN STDCALL
(*PTRAVERSE_ROUTINE)(IN PVOID Context,
IN PVOID Key,
IN PVOID Value);
struct _BINARY_TREE_NODE;
typedef struct _BINARY_TREE
{
struct _BINARY_TREE_NODE * RootNode;
PKEY_COMPARATOR Compare;
BOOLEAN UseNonPagedPool;
union {
NPAGED_LOOKASIDE_LIST NonPaged;
PAGED_LOOKASIDE_LIST Paged;
} List;
union {
KSPIN_LOCK NonPaged;
FAST_MUTEX Paged;
} Lock;
} BINARY_TREE, *PBINARY_TREE;
struct _SPLAY_TREE_NODE;
typedef struct _SPLAY_TREE
{
struct _SPLAY_TREE_NODE * RootNode;
PKEY_COMPARATOR Compare;
BOOLEAN Weighted;
BOOLEAN UseNonPagedPool;
union {
NPAGED_LOOKASIDE_LIST NonPaged;
PAGED_LOOKASIDE_LIST Paged;
} List;
union {
KSPIN_LOCK NonPaged;
FAST_MUTEX Paged;
} Lock;
PVOID Reserved[4];
} SPLAY_TREE, *PSPLAY_TREE;
typedef struct _HASH_TABLE
{
// Size of hash table in number of bits
ULONG HashTableSize;
// Use non-paged pool memory?
BOOLEAN UseNonPagedPool;
// Lock for this structure
union {
KSPIN_LOCK NonPaged;
FAST_MUTEX Paged;
} Lock;
// Pointer to array of hash buckets with splay trees
PSPLAY_TREE HashTrees;
} HASH_TABLE, *PHASH_TABLE;
/* END REACTOS ONLY */
#endif /* __INCLUDE_DDK_EXTYPES_H */
/* EOF */
+612
View File
@@ -0,0 +1,612 @@
#ifndef __INCLUDE_DDK_FSFUNCS_H
#define __INCLUDE_DDK_FSFUNCS_H
/* $Id: fsfuncs.h,v 1.16 2002/09/08 10:47:44 chorns Exp $ */
#define FlagOn(x,f) ((x) & (f))
BOOLEAN STDCALL
FsRtlAddLargeMcbEntry(IN PLARGE_MCB Mcb,
IN LONGLONG Vbn,
IN LONGLONG Lbn,
IN LONGLONG SectorCount);
VOID STDCALL
FsRtlAddMcbEntry(
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
DWORD Unknown3
);
VOID STDCALL
FsRtlAddToTunnelCache (
IN PTUNNEL Cache,
IN ULONGLONG DirectoryKey,
IN PUNICODE_STRING ShortName,
IN PUNICODE_STRING LongName,
IN BOOLEAN KeyByShortName,
IN ULONG DataLength,
IN PVOID Data
);
PVOID STDCALL
FsRtlAllocatePool (
IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes
);
PVOID STDCALL
FsRtlAllocatePoolWithQuota (
IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes
);
PVOID STDCALL
FsRtlAllocatePoolWithQuotaTag (
IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes,
IN ULONG Tag
);
PVOID
STDCALL
FsRtlAllocatePoolWithTag (
IN POOL_TYPE PoolType,
IN ULONG NumberOfBytes,
IN ULONG Tag
);
DWORD
STDCALL
FsRtlAllocateResource (
VOID
);
BOOLEAN
STDCALL
FsRtlAreNamesEqual (
IN PUNICODE_STRING Name1,
IN PUNICODE_STRING Name2,
IN BOOLEAN IgnoreCase,
IN PWCHAR UpcaseTable OPTIONAL
);
DWORD
STDCALL
FsRtlBalanceReads (
DWORD Unknown0
);
BOOLEAN
STDCALL
FsRtlCheckLockForReadAccess (
IN PFILE_LOCK FileLock,
IN PIRP Irp
);
BOOLEAN
STDCALL
FsRtlCheckLockForWriteAccess (
IN PFILE_LOCK FileLock,
IN PIRP Irp
);
NTSTATUS STDCALL
FsRtlCheckOplock(IN POPLOCK Oplock,
IN PIRP Irp,
IN PVOID Context,
IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
BOOLEAN
STDCALL
FsRtlCopyRead (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN BOOLEAN Wait,
IN ULONG LockKey,
OUT PVOID Buffer,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN
STDCALL
FsRtlCopyWrite (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN BOOLEAN Wait,
IN ULONG LockKey,
IN PVOID Buffer,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN STDCALL
FsRtlCurrentBatchOplock(IN POPLOCK Oplock);
VOID STDCALL
FsRtlDeleteKeyFromTunnelCache(IN PTUNNEL Cache,
IN ULONGLONG DirectoryKey);
VOID STDCALL
FsRtlDeleteTunnelCache(IN PTUNNEL Cache);
VOID STDCALL
FsRtlDeregisterUncProvider(IN HANDLE Handle);
VOID
STDCALL
FsRtlDissectDbcs (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
DWORD Unknown3
);
VOID
STDCALL
FsRtlDissectName (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
DWORD Unknown3
);
BOOLEAN
STDCALL
FsRtlDoesDbcsContainWildCards (
IN DWORD Unknown0
);
BOOLEAN
STDCALL
FsRtlDoesNameContainWildCards (
IN PUNICODE_STRING Name
);
BOOLEAN
STDCALL
FsRtlFastCheckLockForRead (
IN PFILE_LOCK FileLock,
IN PLARGE_INTEGER FileOffset,
IN PLARGE_INTEGER Length,
IN ULONG Key,
IN PFILE_OBJECT FileObject,
IN PEPROCESS Process
);
BOOLEAN
STDCALL
FsRtlFastCheckLockForWrite (
IN PFILE_LOCK FileLock,
IN PLARGE_INTEGER FileOffset,
IN PLARGE_INTEGER Length,
IN ULONG Key,
IN PFILE_OBJECT FileObject,
IN PEPROCESS Process
);
NTSTATUS
STDCALL
FsRtlFastUnlockAll (
IN PFILE_LOCK FileLock,
IN PFILE_OBJECT FileObject,
IN PEPROCESS Process,
IN PVOID Context OPTIONAL
);
NTSTATUS
STDCALL
FsRtlFastUnlockAllByKey (
IN PFILE_LOCK FileLock,
IN PFILE_OBJECT FileObject,
IN PEPROCESS Process,
IN DWORD Key,
IN PVOID Context OPTIONAL
);
NTSTATUS
STDCALL
FsRtlFastUnlockSingle (
IN PFILE_LOCK FileLock,
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN PLARGE_INTEGER Length,
IN PEPROCESS Process,
IN ULONG Key,
IN PVOID Context OPTIONAL,
IN BOOLEAN AlreadySynchronized
);
VOID
STDCALL
FsRtlFindInTunnelCache (
IN PTUNNEL Cache,
IN ULONGLONG DirectoryKey,
IN PUNICODE_STRING Name,
OUT PUNICODE_STRING ShortName,
OUT PUNICODE_STRING LongName,
IN OUT PULONG DataLength,
OUT PVOID Data
);
NTSTATUS
STDCALL
FsRtlGetFileSize (
IN PFILE_OBJECT FileObject,
IN OUT PLARGE_INTEGER FileSize
);
PFILE_LOCK_INFO
STDCALL
FsRtlGetNextFileLock (
IN PFILE_LOCK FileLock,
IN BOOLEAN Restart
);
BOOLEAN STDCALL
FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb,
IN ULONG RunIndex,
OUT PLONGLONG Vbn,
OUT PLONGLONG Lbn,
OUT PLONGLONG SectorCount);
VOID
STDCALL
FsRtlGetNextMcbEntry (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
DWORD Unknown3,
DWORD Unknown4
);
#define FsRtlEnterFileSystem KeEnterCriticalRegion
#define FsRtlExitFileSystem KeLeaveCriticalRegion
VOID
STDCALL
FsRtlInitializeFileLock (
IN PFILE_LOCK FileLock,
IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
);
VOID STDCALL
FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb,
IN POOL_TYPE PoolType);
VOID
STDCALL
FsRtlInitializeMcb (
DWORD Unknown0,
DWORD Unknown1
);
VOID STDCALL
FsRtlInitializeOplock(IN OUT POPLOCK Oplock);
VOID
STDCALL
FsRtlInitializeTunnelCache (
IN PTUNNEL Cache
);
BOOLEAN
STDCALL
FsRtlIsDbcsInExpression (
DWORD Unknown0,
DWORD Unknown1
);
BOOLEAN
STDCALL
FsRtlIsFatDbcsLegal (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
DWORD Unknown3,
DWORD Unknown4
);
BOOLEAN
STDCALL
FsRtlIsHpfsDbcsLegal (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
DWORD Unknown3,
DWORD Unknown4
);
BOOLEAN
STDCALL
FsRtlIsNameInExpression (
IN PUNICODE_STRING Expression,
IN PUNICODE_STRING Name,
IN BOOLEAN IgnoreCase,
IN PWCHAR UpcaseTable OPTIONAL
);
BOOLEAN STDCALL
FsRtlIsNtstatusExpected(IN NTSTATUS NtStatus);
BOOLEAN STDCALL
FsRtlIsTotalDeviceFailure(IN NTSTATUS NtStatus);
#define FsRtlIsUnicodeCharacterWild(C) ( \
(((C) >= 0x40) ? \
FALSE : \
FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \
)
BOOLEAN STDCALL
FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb,
IN LONGLONG Vbn,
OUT PLONGLONG Lbn OPTIONAL,
OUT PLONGLONG SectorCountFromLbn OPTIONAL,
OUT PLONGLONG StartingLbn OPTIONAL,
OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
OUT PULONG Index OPTIONAL);
BOOLEAN STDCALL
FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb,
OUT PLONGLONG Vbn,
OUT PLONGLONG Lbn);
VOID
STDCALL
FsRtlLookupLastMcbEntry (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2
);
VOID
STDCALL
FsRtlLookupMcbEntry (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
DWORD Unknown3,
DWORD Unknown4
);
BOOLEAN
STDCALL
FsRtlMdlRead (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN ULONG LockKey,
OUT PMDL *MdlChain,
OUT PIO_STATUS_BLOCK IoStatus
);
BOOLEAN
STDCALL
FsRtlMdlReadComplete (
IN PFILE_OBJECT FileObject,
IN OUT PMDL MdlChain
);
BOOLEAN
STDCALL
FsRtlMdlReadCompleteDev (
IN PFILE_OBJECT FileObject,
IN PMDL MdlChain,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN
STDCALL
FsRtlMdlReadDev (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN ULONG LockKey,
OUT PMDL *MdlChain,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
BOOLEAN
STDCALL
FsRtlMdlWriteComplete (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN PMDL MdlChain
);
BOOLEAN
STDCALL
FsRtlMdlWriteCompleteDev (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN PMDL MdlChain,
IN PDEVICE_OBJECT DeviceObject
);
VOID
STDCALL
FsRtlNotifyChangeDirectory (
IN PNOTIFY_SYNC NotifySync,
IN PVOID FsContext,
IN PSTRING FullDirectoryName,
IN PLIST_ENTRY NotifyList,
IN BOOLEAN WatchTree,
IN ULONG CompletionFilter,
IN PIRP NotifyIrp
);
VOID
STDCALL
FsRtlNotifyCleanup (
IN PNOTIFY_SYNC NotifySync,
IN PLIST_ENTRY NotifyList,
IN PVOID FsContext
);
typedef
BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) (
IN PVOID NotifyContext,
IN PVOID TargetContext,
IN PSECURITY_SUBJECT_CONTEXT SubjectContext
);
VOID
STDCALL
FsRtlNotifyFullChangeDirectory (
IN PNOTIFY_SYNC NotifySync,
IN PLIST_ENTRY NotifyList,
IN PVOID FsContext,
IN PSTRING FullDirectoryName,
IN BOOLEAN WatchTree,
IN BOOLEAN IgnoreBuffer,
IN ULONG CompletionFilter,
IN PIRP NotifyIrp,
IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
);
VOID
STDCALL
FsRtlNotifyFullReportChange (
IN PNOTIFY_SYNC NotifySync,
IN PLIST_ENTRY NotifyList,
IN PSTRING FullTargetName,
IN USHORT TargetNameOffset,
IN PSTRING StreamName OPTIONAL,
IN PSTRING NormalizedParentName OPTIONAL,
IN ULONG FilterMatch,
IN ULONG Action,
IN PVOID TargetContext
);
VOID
STDCALL
FsRtlNotifyUninitializeSync (
IN OUT PNOTIFY_SYNC * NotifySync
);
VOID
STDCALL
FsRtlNotifyReportChange (
IN PNOTIFY_SYNC NotifySync,
IN PLIST_ENTRY NotifyList,
IN PSTRING FullTargetName,
IN PUSHORT FileNamePartLength,
IN ULONG FilterMatch
);
VOID STDCALL
FsRtlNotifyInitializeSync(IN OUT PNOTIFY_SYNC *NotifySync);
NTSTATUS STDCALL
FsRtlNotifyVolumeEvent(IN PFILE_OBJECT FileObject,
IN ULONG EventCode);
NTSTATUS STDCALL
FsRtlOplockFsctrl(IN POPLOCK Oplock,
IN PIRP Irp,
IN ULONG OpenCount);
BOOLEAN STDCALL
FsRtlOplockIsFastIoPossible(IN POPLOCK Oplock);
BOOLEAN
STDCALL
FsRtlPrepareMdlWrite (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN ULONG LockKey,
OUT PMDL *MdlChain,
OUT PIO_STATUS_BLOCK IoStatus
);
BOOLEAN
STDCALL
FsRtlPrepareMdlWriteDev (
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN ULONG LockKey,
OUT PMDL *MdlChain,
OUT PIO_STATUS_BLOCK IoStatus,
IN PDEVICE_OBJECT DeviceObject
);
NTSTATUS STDCALL
FsRtlNormalizeNtstatus(IN NTSTATUS NtStatusToNormalize,
IN NTSTATUS NormalizedNtStatus);
ULONG STDCALL
FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb);
VOID
STDCALL
FsRtlNumberOfRunsInMcb (
DWORD Unknown0
);
VOID
STDCALL
FsRtlPostPagingFileStackOverflow (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2
);
VOID
STDCALL
FsRtlPostStackOverflow (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2
);
BOOLEAN
STDCALL
FsRtlPrivateLock (
IN PFILE_LOCK FileLock,
IN PFILE_OBJECT FileObject,
IN PLARGE_INTEGER FileOffset,
IN PLARGE_INTEGER Length,
IN PEPROCESS Process,
IN ULONG Key,
IN BOOLEAN FailImmediately,
IN BOOLEAN ExclusiveLock,
OUT PIO_STATUS_BLOCK IoStatus,
IN PIRP Irp OPTIONAL,
IN PVOID Context,
IN BOOLEAN AlreadySynchronized
);
NTSTATUS
STDCALL
FsRtlProcessFileLock (
IN PFILE_LOCK FileLock,
IN PIRP Irp,
IN PVOID Context OPTIONAL
);
NTSTATUS STDCALL
FsRtlRegisterUncProvider(IN OUT PHANDLE Handle,
IN PUNICODE_STRING RedirectorDeviceName,
IN BOOLEAN MailslotsSupported);
VOID STDCALL
FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb,
IN LONGLONG Vbn,
IN LONGLONG SectorCount);
VOID
STDCALL
FsRtlRemoveMcbEntry (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2
);
BOOLEAN STDCALL
FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb,
IN LONGLONG Vbn,
IN LONGLONG Amount);
NTSTATUS
STDCALL
FsRtlSyncVolumes (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2
);
VOID STDCALL
FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb,
IN LONGLONG Vbn);
VOID
STDCALL
FsRtlTruncateMcb (
DWORD Unknown0,
DWORD Unknown1
);
VOID
STDCALL
FsRtlUninitializeFileLock (
IN PFILE_LOCK FileLock
);
VOID STDCALL
FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb);
VOID
STDCALL
FsRtlUninitializeMcb (
DWORD Unknown0
);
VOID STDCALL
FsRtlUninitializeOplock(IN POPLOCK Oplock);
#endif /* __INCLUDE_DDK_FSFUNCS_H */
+96
View File
@@ -0,0 +1,96 @@
#ifndef __INCLUDE_DDK_FSTYPES_H
#define __INCLUDE_DDK_FSTYPES_H
/* $Id: fstypes.h,v 1.7 2002/09/08 10:47:44 chorns Exp $ */
#define FSRTL_TAG TAG('F','S','r','t')
typedef struct _FILE_LOCK_INFO {
LARGE_INTEGER StartingByte;
LARGE_INTEGER Length;
BOOLEAN ExclusiveLock;
ULONG Key;
PFILE_OBJECT FileObject;
PEPROCESS Process;
LARGE_INTEGER EndingByte;
} FILE_LOCK_INFO, *PFILE_LOCK_INFO;
// raw internal file lock struct returned from FsRtlGetNextFileLock
typedef struct _FILE_SHARED_LOCK_ENTRY {
PVOID Unknown1;
PVOID Unknown2;
FILE_LOCK_INFO FileLock;
} FILE_SHARED_LOCK_ENTRY, *PFILE_SHARED_LOCK_ENTRY;
// raw internal file lock struct returned from FsRtlGetNextFileLock
typedef struct _FILE_EXCLUSIVE_LOCK_ENTRY {
LIST_ENTRY ListEntry;
PVOID Unknown1;
PVOID Unknown2;
FILE_LOCK_INFO FileLock;
} FILE_EXCLUSIVE_LOCK_ENTRY, *PFILE_EXCLUSIVE_LOCK_ENTRY;
typedef NTSTATUS (*PCOMPLETE_LOCK_IRP_ROUTINE) (
IN PVOID Context,
IN PIRP Irp
);
typedef VOID (*PUNLOCK_ROUTINE) (
IN PVOID Context,
IN PFILE_LOCK_INFO FileLockInfo
);
typedef struct _FILE_LOCK {
PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine;
PUNLOCK_ROUTINE UnlockRoutine;
BOOLEAN FastIoIsQuestionable;
BOOLEAN Pad[3];
PVOID LockInformation;
FILE_LOCK_INFO LastReturnedLockInfo;
PVOID LastReturnedLock;
} FILE_LOCK, *PFILE_LOCK;
typedef struct _TUNNEL {
FAST_MUTEX Mutex;
PRTL_SPLAY_LINKS Cache;
LIST_ENTRY TimerQueue;
USHORT NumEntries;
} TUNNEL, *PTUNNEL;
typedef struct _NOTIFY_SYNC
{
DWORD Unknown0; /* 0x00 */
DWORD Unknown1; /* 0x04 */
DWORD Unknown2; /* 0x08 */
WORD Unknown3; /* 0x0c */
WORD Unknown4; /* 0x0e */
DWORD Unknown5; /* 0x10 */
DWORD Unknown6; /* 0x14 */
DWORD Unknown7; /* 0x18 */
DWORD Unknown8; /* 0x1c */
DWORD Unknown9; /* 0x20 */
DWORD Unknown10; /* 0x24 */
} NOTIFY_SYNC, * PNOTIFY_SYNC;
typedef struct _LARGE_MCB
{
PFAST_MUTEX FastMutex;
ULONG MaximumPairCount;
ULONG PairCount;
POOL_TYPE PoolType;
PVOID Mapping;
} LARGE_MCB, *PLARGE_MCB;
typedef VOID
(*POPLOCK_WAIT_COMPLETE_ROUTINE)(PVOID Context,
PIRP Irp);
typedef VOID
(*POPLOCK_FS_PREPOST_IRP)(PVOID Context,
PIRP Irp);
typedef PVOID OPLOCK, *POPLOCK;
#endif /* __INCLUDE_DDK_FSFUNCS_H */
+309
View File
@@ -0,0 +1,309 @@
#ifndef __INCLUDE_DDK_HALFUNCS_H
#define __INCLUDE_DDK_HALFUNCS_H
/* $Id: halfuncs.h,v 1.3 2002/09/08 10:47:44 chorns Exp $ */
VOID STDCALL
HalAcquireDisplayOwnership(IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
NTSTATUS STDCALL
HalAdjustResourceList(PCM_RESOURCE_LIST Resources);
NTSTATUS STDCALL
HalAllocateAdapterChannel(IN PADAPTER_OBJECT AdapterObject,
IN PDEVICE_OBJECT DeviceObject,
IN ULONG NumberOfMapRegisters,
IN PDRIVER_CONTROL ExecutionRoutine,
IN PVOID Context);
PVOID STDCALL
HalAllocateCommonBuffer(PADAPTER_OBJECT AdapterObject,
ULONG Length,
PPHYSICAL_ADDRESS LogicalAddress,
BOOLEAN CacheEnabled);
PVOID STDCALL
HalAllocateCrashDumpRegisters(IN PADAPTER_OBJECT AdapterObject,
IN OUT PULONG NumberOfMapRegisters);
BOOLEAN STDCALL
HalAllProcessorsStarted(VOID);
NTSTATUS STDCALL
HalAssignSlotResources(
PUNICODE_STRING RegistryPath,
PUNICODE_STRING DriverClassName,
PDRIVER_OBJECT DriverObject,
PDEVICE_OBJECT DeviceObject,
INTERFACE_TYPE BusType,
ULONG BusNumber,
ULONG SlotNumber,
PCM_RESOURCE_LIST *AllocatedResources
);
BOOLEAN STDCALL
HalBeginSystemInterrupt(ULONG Vector,
KIRQL Irql,
PKIRQL OldIrql);
VOID STDCALL
HalCalibratePerformanceCounter(ULONG Count);
/*
FASTCALL
HalClearSoftwareInterrupt
*/
BOOLEAN STDCALL
HalDisableSystemInterrupt(ULONG Vector,
ULONG Unknown2);
VOID STDCALL
HalDisplayString(IN PCH String);
BOOLEAN STDCALL
HalEnableSystemInterrupt(ULONG Vector,
ULONG Unknown2,
ULONG Unknown3);
VOID STDCALL
HalEndSystemInterrupt(KIRQL Irql,
ULONG Unknown2);
/* Is this function really exported ?? */
VOID
HalExamineMBR(PDEVICE_OBJECT DeviceObject,
ULONG SectorSize,
ULONG MBRTypeIdentifier,
PVOID Buffer);
BOOLEAN STDCALL
HalFlushCommonBuffer(ULONG Unknown1,
ULONG Unknown2,
ULONG Unknown3,
ULONG Unknown4,
ULONG Unknown5,
ULONG Unknown6,
ULONG Unknown7,
ULONG Unknown8);
VOID STDCALL
HalFreeCommonBuffer(PADAPTER_OBJECT AdapterObject,
ULONG Length,
PHYSICAL_ADDRESS LogicalAddress,
PVOID VirtualAddress,
BOOLEAN CacheEnabled);
PADAPTER_OBJECT STDCALL
HalGetAdapter(PDEVICE_DESCRIPTION DeviceDescription,
PULONG NumberOfMapRegisters);
ULONG STDCALL
HalGetBusData(BUS_DATA_TYPE BusDataType,
ULONG BusNumber,
ULONG SlotNumber,
PVOID Buffer,
ULONG Length);
ULONG STDCALL
HalGetBusDataByOffset(BUS_DATA_TYPE BusDataType,
ULONG BusNumber,
ULONG SlotNumber,
PVOID Buffer,
ULONG Offset,
ULONG Length);
/* Is this function really exported ?? */
ULONG
HalGetDmaAlignmentRequirement(VOID);
BOOLEAN STDCALL
HalGetEnvironmentVariable(IN PCH Name,
OUT PCH Value,
IN USHORT ValueLength);
ULONG STDCALL
HalGetInterruptVector(INTERFACE_TYPE InterfaceType,
ULONG BusNumber,
ULONG BusInterruptLevel,
ULONG BusInterruptVector,
PKIRQL Irql,
PKAFFINITY Affinity);
VOID STDCALL
HalInitializeProcessor(ULONG ProcessorNumber,
PVOID ProcessorStack);
BOOLEAN STDCALL
HalInitSystem(ULONG BootPhase,
PLOADER_PARAMETER_BLOCK LoaderBlock);
BOOLEAN STDCALL
HalMakeBeep(ULONG Frequency);
VOID STDCALL
HalQueryDisplayParameters(PULONG DispSizeX,
PULONG DispSizeY,
PULONG CursorPosX,
PULONG CursorPosY);
VOID STDCALL
HalQueryRealTimeClock(PTIME_FIELDS Time);
/* Is this function really exported ?? */
VOID
HalQuerySystemInformation(VOID);
ULONG STDCALL
HalReadDmaCounter(PADAPTER_OBJECT AdapterObject);
VOID STDCALL
HalReportResourceUsage(VOID);
VOID STDCALL
HalRequestIpi(ULONG Unknown);
/*
FASTCALL
HalRequestSoftwareInterrupt
*/
VOID STDCALL
HalReturnToFirmware(ULONG Action);
ULONG STDCALL
HalSetBusData(BUS_DATA_TYPE BusDataType,
ULONG BusNumber,
ULONG SlotNumber,
PVOID Buffer,
ULONG Length);
ULONG STDCALL
HalSetBusDataByOffset(BUS_DATA_TYPE BusDataType,
ULONG BusNumber,
ULONG SlotNumber,
PVOID Buffer,
ULONG Offset,
ULONG Length);
VOID STDCALL
HalSetDisplayParameters(ULONG CursorPosX,
ULONG CursorPosY);
BOOLEAN STDCALL
HalSetEnvironmentVariable(IN PCH Name,
IN PCH Value);
/*
HalSetProfileInterval
*/
VOID STDCALL
HalSetRealTimeClock(PTIME_FIELDS Time);
/*
HalSetTimeIncrement
*/
BOOLEAN STDCALL
HalStartNextProcessor(ULONG Unknown1,
ULONG Unknown2);
/*
HalStartProfileInterrupt
*/
/*
HalStopProfileInterrupt
*/
ULONG FASTCALL
HalSystemVectorDispatchEntry(ULONG Unknown1,
ULONG Unknown2,
ULONG Unknown3);
BOOLEAN STDCALL
HalTranslateBusAddress(INTERFACE_TYPE InterfaceType,
ULONG BusNumber,
PHYSICAL_ADDRESS BusAddress,
PULONG AddressSpace,
PPHYSICAL_ADDRESS TranslatedAddress);
/*
* Kernel debugger support functions
*/
BOOLEAN STDCALL
KdPortInitialize(PKD_PORT_INFORMATION PortInformation,
DWORD Unknown1,
DWORD Unknown2);
BOOLEAN STDCALL
KdPortGetByte(PUCHAR ByteRecieved);
BOOLEAN STDCALL
KdPortPollByte(PUCHAR ByteRecieved);
VOID STDCALL
KdPortPutByte(UCHAR ByteToSend);
/*
* Port I/O functions
*/
VOID STDCALL
READ_PORT_BUFFER_UCHAR(PUCHAR Port,
PUCHAR Value,
ULONG Count);
VOID STDCALL
READ_PORT_BUFFER_ULONG(PULONG Port,
PULONG Value,
ULONG Count);
VOID STDCALL
READ_PORT_BUFFER_USHORT(PUSHORT Port,
PUSHORT Value,
ULONG Count);
UCHAR STDCALL
READ_PORT_UCHAR(PUCHAR Port);
ULONG STDCALL
READ_PORT_ULONG(PULONG Port);
USHORT STDCALL
READ_PORT_USHORT(PUSHORT Port);
VOID STDCALL
WRITE_PORT_BUFFER_UCHAR(PUCHAR Port,
PUCHAR Value,
ULONG Count);
VOID STDCALL
WRITE_PORT_BUFFER_ULONG(PULONG Port,
PULONG Value,
ULONG Count);
VOID STDCALL
WRITE_PORT_BUFFER_USHORT(PUSHORT Port,
PUSHORT Value,
ULONG Count);
VOID STDCALL
WRITE_PORT_UCHAR(PUCHAR Port,
UCHAR Value);
VOID STDCALL
WRITE_PORT_ULONG(PULONG Port,
ULONG Value);
VOID STDCALL
WRITE_PORT_USHORT(PUSHORT Port,
USHORT Value);
#endif /* __INCLUDE_DDK_HALDDK_H */
/* EOF */
+436
View File
@@ -0,0 +1,436 @@
/* $Id: haltypes.h,v 1.5 2002/09/08 10:47:44 chorns Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: include/ddk/haltypes.h
* PURPOSE: HAL provided defintions for device drivers
* PROGRAMMER: David Welch ([email protected])
* REVISION HISTORY:
* 23/06/98: Taken from linux system.h
*/
#ifndef __INCLUDE_DDK_HALTYPES_H
#define __INCLUDE_DDK_HALTYPES_H
/* HalReturnToFirmware */
#define FIRMWARE_HALT 1
#define FIRMWARE_REBOOT 3
enum
{
DEVICE_DESCRIPTION_VERSION,
DEVICE_DESCRIPTION_VERSION1,
};
typedef ULONG DMA_WIDTH;
typedef ULONG DMA_SPEED;
/*
* PURPOSE: Types for HalGetBusData
*/
typedef enum _BUS_DATA_TYPE
{
ConfigurationSpaceUndefined = -1,
Cmos,
EisaConfiguration,
Pos,
CbusConfiguration,
PCIConfiguration,
VMEConfiguration,
NuBusConfiguration,
PCMCIAConfiguration,
MPIConfiguration,
MPSAConfiguration,
PNPISAConfiguration,
MaximumBusDataType,
} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
typedef struct _DEVICE_DESCRIPTION
{
ULONG Version;
BOOLEAN Master;
BOOLEAN ScatterGather;
BOOLEAN DemandMode;
BOOLEAN AutoInitialize;
BOOLEAN Dma32BitAddress;
BOOLEAN IgnoreCount;
BOOLEAN Reserved1;
BOOLEAN Reserved2;
ULONG BusNumber;
ULONG DmaChannel;
INTERFACE_TYPE InterfaceType;
DMA_WIDTH DmaWidth;
DMA_SPEED DmaSpeed;
ULONG MaximumLength;
ULONG DmaPort;
} DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
/* PCI bus definitions */
#define PCI_TYPE0_ADDRESSES 6
#define PCI_TYPE1_ADDRESSES 2
#define PCI_TYPE2_ADDRESSES 5
typedef struct _PCI_COMMON_CONFIG
{
USHORT VendorID; /* read-only */
USHORT DeviceID; /* read-only */
USHORT Command;
USHORT Status;
UCHAR RevisionID; /* read-only */
UCHAR ProgIf; /* read-only */
UCHAR SubClass; /* read-only */
UCHAR BaseClass; /* read-only */
UCHAR CacheLineSize; /* read-only */
UCHAR LatencyTimer; /* read-only */
UCHAR HeaderType; /* read-only */
UCHAR BIST;
union
{
struct _PCI_HEADER_TYPE_0
{
ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
ULONG CIS;
USHORT SubVendorID;
USHORT SubSystemID;
ULONG ROMBaseAddress;
ULONG Reserved2[2];
UCHAR InterruptLine;
UCHAR InterruptPin; /* read-only */
UCHAR MinimumGrant; /* read-only */
UCHAR MaximumLatency; /* read-only */
} type0;
/* PCI to PCI Bridge */
struct _PCI_HEADER_TYPE_1
{
ULONG BaseAddresses[PCI_TYPE1_ADDRESSES];
UCHAR PrimaryBus;
UCHAR SecondaryBus;
UCHAR SubordinateBus;
UCHAR SecondaryLatency;
UCHAR IOBase;
UCHAR IOLimit;
USHORT SecondaryStatus;
USHORT MemoryBase;
USHORT MemoryLimit;
USHORT PrefetchBase;
USHORT PrefetchLimit;
ULONG PrefetchBaseUpper32;
ULONG PrefetchLimitUpper32;
USHORT IOBaseUpper16;
USHORT IOLimitUpper16;
UCHAR CapabilitiesPtr;
UCHAR Reserved1[3];
ULONG ROMBaseAddress;
UCHAR InterruptLine;
UCHAR InterruptPin;
USHORT BridgeControl;
} type1;
/* PCI to CARDBUS Bridge */
struct _PCI_HEADER_TYPE_2
{
ULONG SocketRegistersBaseAddress;
UCHAR CapabilitiesPtr;
UCHAR Reserved;
USHORT SecondaryStatus;
UCHAR PrimaryBus;
UCHAR SecondaryBus;
UCHAR SubordinateBus;
UCHAR SecondaryLatency;
struct
{
ULONG Base;
ULONG Limit;
} Range[PCI_TYPE2_ADDRESSES-1];
UCHAR InterruptLine;
UCHAR InterruptPin;
USHORT BridgeControl;
} type2;
} u;
UCHAR DeviceSpecific[192];
} PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
#define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET (PCI_COMMON_CONFIG, DeviceSpecific))
#define PCI_MAX_DEVICES 32
#define PCI_MAX_FUNCTION 8
#define PCI_INVALID_VENDORID 0xFFFF
/* Bit encodings for PCI_COMMON_CONFIG.HeaderType */
#define PCI_MULTIFUNCTION 0x80
#define PCI_DEVICE_TYPE 0x00
#define PCI_BRIDGE_TYPE 0x01
/* Bit encodings for PCI_COMMON_CONFIG.Command */
#define PCI_ENABLE_IO_SPACE 0x0001
#define PCI_ENABLE_MEMORY_SPACE 0x0002
#define PCI_ENABLE_BUS_MASTER 0x0004
#define PCI_ENABLE_SPECIAL_CYCLES 0x0008
#define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
#define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
#define PCI_ENABLE_PARITY 0x0040
#define PCI_ENABLE_WAIT_CYCLE 0x0080
#define PCI_ENABLE_SERR 0x0100
#define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
/* Bit encodings for PCI_COMMON_CONFIG.Status */
#define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
#define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
#define PCI_STATUS_DEVSEL 0x0600 /* 2 bits wide */
#define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
#define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
#define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
#define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
#define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
/* Bit encodes for PCI_COMMON_CONFIG.u.type0.BaseAddresses */
#define PCI_ADDRESS_IO_SPACE 0x00000001
#define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006
#define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008
#define PCI_TYPE_32BIT 0
#define PCI_TYPE_20BIT 2
#define PCI_TYPE_64BIT 4
/* Bit encodes for PCI_COMMON_CONFIG.u.type0.ROMBaseAddresses */
#define PCI_ROMADDRESS_ENABLED 0x00000001
typedef struct _PCI_SLOT_NUMBER
{
union
{
struct
{
ULONG DeviceNumber:5;
ULONG FunctionNumber:3;
ULONG Reserved:24;
} bits;
ULONG AsULONG;
} u;
} PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
/* Hal dispatch table */
typedef enum _HAL_QUERY_INFORMATION_CLASS
{
HalInstalledBusInformation,
HalProfileSourceInformation,
HalSystemDockInformation,
HalPowerInformation,
HalProcessorSpeedInformation,
HalCallbackInformation,
HalMapRegisterInformation,
HalMcaLogInformation,
HalFrameBufferCachingInformation,
HalDisplayBiosInformation
/* information levels >= 0x8000000 reserved for OEM use */
} HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
typedef enum _HAL_SET_INFORMATION_CLASS
{
HalProfileSourceInterval,
HalProfileSourceInterruptHandler,
HalMcaRegisterDriver
} HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
typedef struct _BUS_HANDLER *PBUS_HANDLER;
typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
typedef BOOLEAN STDCALL
(*PHAL_RESET_DISPLAY_PARAMETERS)(ULONG Columns, ULONG Rows);
typedef NTSTATUS STDCALL
(*pHalQuerySystemInformation)(IN HAL_QUERY_INFORMATION_CLASS InformationClass,
IN ULONG BufferSize,
IN OUT PVOID Buffer,
OUT PULONG ReturnedLength);
typedef NTSTATUS STDCALL
(*pHalSetSystemInformation)(IN HAL_SET_INFORMATION_CLASS InformationClass,
IN ULONG BufferSize,
IN PVOID Buffer);
typedef NTSTATUS STDCALL
(*pHalQueryBusSlots)(IN PBUS_HANDLER BusHandler,
IN ULONG BufferSize,
OUT PULONG SlotNumbers,
OUT PULONG ReturnedLength);
/* Control codes of HalDeviceControl function */
#define BCTL_EJECT 0x0001
#define BCTL_QUERY_DEVICE_ID 0x0002
#define BCTL_QUERY_DEVICE_UNIQUE_ID 0x0003
#define BCTL_QUERY_DEVICE_CAPABILITIES 0x0004
#define BCTL_QUERY_DEVICE_RESOURCES 0x0005
#define BCTL_QUERY_DEVICE_RESOURCE_REQUIREMENTS 0x0006
#define BCTL_QUERY_EJECT 0x0007
#define BCTL_SET_LOCK 0x0008
#define BCTL_SET_POWER 0x0009
#define BCTL_SET_RESUME 0x000A
#define BCTL_SET_DEVICE_RESOURCES 0x000B
/* Defines for BCTL structures */
typedef struct
{
BOOLEAN PowerSupported;
BOOLEAN ResumeSupported;
BOOLEAN LockSupported;
BOOLEAN EjectSupported;
BOOLEAN Removable;
} BCTL_DEVICE_CAPABILITIES, *PBCTL_DEVICE_CAPABILITIES;
typedef struct _DEVICE_CONTROL_CONTEXT
{
NTSTATUS Status;
PDEVICE_HANDLER_OBJECT DeviceHandler;
PDEVICE_OBJECT DeviceObject;
ULONG ControlCode;
PVOID Buffer;
PULONG BufferLength;
PVOID Context;
} DEVICE_CONTROL_CONTEXT, *PDEVICE_CONTROL_CONTEXT;
typedef VOID STDCALL
(*PDEVICE_CONTROL_COMPLETION)(IN PDEVICE_CONTROL_CONTEXT ControlContext);
typedef NTSTATUS STDCALL
(*pHalDeviceControl)(IN PDEVICE_HANDLER_OBJECT DeviceHandler,
IN PDEVICE_OBJECT DeviceObject,
IN ULONG ControlCode,
IN OUT PVOID Buffer OPTIONAL,
IN OUT PULONG BufferLength OPTIONAL,
IN PVOID Context,
IN PDEVICE_CONTROL_COMPLETION CompletionRoutine);
typedef VOID FASTCALL
(*pHalExamineMBR)(IN PDEVICE_OBJECT DeviceObject,
IN ULONG SectorSize,
IN ULONG MBRTypeIdentifier,
OUT PVOID *Buffer);
typedef VOID FASTCALL
(*pHalIoAssignDriveLetters)(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN PSTRING NtDeviceName,
OUT PUCHAR NtSystemPath,
OUT PSTRING NtSystemPathString);
typedef NTSTATUS FASTCALL
(*pHalIoReadPartitionTable)(IN PDEVICE_OBJECT DeviceObject,
IN ULONG SectorSize,
IN BOOLEAN ReturnRecognizedPartitions,
OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer);
typedef NTSTATUS FASTCALL
(*pHalIoSetPartitionInformation)(IN PDEVICE_OBJECT DeviceObject,
IN ULONG SectorSize,
IN ULONG PartitionNumber,
IN ULONG PartitionType);
typedef NTSTATUS FASTCALL
(*pHalIoWritePartitionTable)(IN PDEVICE_OBJECT DeviceObject,
IN ULONG SectorSize,
IN ULONG SectorsPerTrack,
IN ULONG NumberOfHeads,
IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer);
typedef PBUS_HANDLER FASTCALL
(*pHalHandlerForBus)(IN INTERFACE_TYPE InterfaceType,
IN ULONG BusNumber);
typedef VOID FASTCALL
(*pHalReferenceBusHandler)(IN PBUS_HANDLER BusHandler);
typedef struct _HAL_DISPATCH
{
ULONG Version;
pHalQuerySystemInformation HalQuerySystemInformation;
pHalSetSystemInformation HalSetSystemInformation;
pHalQueryBusSlots HalQueryBusSlots;
pHalDeviceControl HalDeviceControl;
pHalExamineMBR HalExamineMBR;
pHalIoAssignDriveLetters HalIoAssignDriveLetters;
pHalIoReadPartitionTable HalIoReadPartitionTable;
pHalIoSetPartitionInformation HalIoSetPartitionInformation;
pHalIoWritePartitionTable HalIoWritePartitionTable;
pHalHandlerForBus HalReferenceHandlerForBus;
pHalReferenceBusHandler HalReferenceBusHandler;
pHalReferenceBusHandler HalDereferenceBusHandler;
} HAL_DISPATCH, *PHAL_DISPATCH;
#define HAL_DISPATCH_VERSION 1
#ifdef __NTOSKRNL__
extern HAL_DISPATCH EXPORTED HalDispatchTable;
#else
extern HAL_DISPATCH IMPORTED HalDispatchTable;
#endif
/* Hal private dispatch table */
typedef struct _HAL_PRIVATE_DISPATCH
{
ULONG Version;
} HAL_PRIVATE_DISPATCH, *PHAL_PRIVATE_DISPATCH;
#define HAL_PRIVATE_DISPATCH_VERSION 1
#ifdef __NTOSKRNL__
extern HAL_PRIVATE_DISPATCH EXPORTED HalPrivateDispatchTable;
#else
extern HAL_PRIVATE_DISPATCH IMPORTED HalPrivateDispatchTable;
#endif
/*
* Kernel debugger section
*/
typedef struct _KD_PORT_INFORMATION
{
ULONG ComPort;
ULONG BaudRate;
ULONG BaseAddress;
} KD_PORT_INFORMATION, *PKD_PORT_INFORMATION;
#ifdef __NTHAL__
extern ULONG EXPORTED KdComPortInUse;
#else
extern ULONG IMPORTED KdComPortInUse;
#endif
#endif /* __INCLUDE_DDK_HALTYPES_H */
/* EOF */
+7
View File
@@ -0,0 +1,7 @@
/*
* PURPOSE: The number of device specific level levels
*/
#define NR_DEVICE_SPECIFIC_LEVELS (16)
+6
View File
@@ -0,0 +1,6 @@
#ifndef __INCLUDE_DDK_I386_PAGESIZE_H
#define __INCLUDE_DDK_I386_PAGESIZE_H
#define PAGESIZE (4096)
#endif /* __INCLUDE_DDK_I386_PAGESIZE_H */
+57
View File
@@ -0,0 +1,57 @@
/*
*
*/
#ifndef __INCLUDE_DDK_I386_TSS_H
#define __INCLUDE_DDK_I386_TSS_H
#define KTSS_ESP0 (0x4)
#ifndef __ASM__
typedef struct _KTSS
{
USHORT PreviousTask;
USHORT Reserved1;
ULONG Esp0;
USHORT Ss0;
USHORT Reserved2;
ULONG Esp1;
USHORT Ss1;
USHORT Reserved3;
ULONG Esp2;
USHORT Ss2;
USHORT Reserved4;
ULONG Cr3;
ULONG Eip;
ULONG Eflags;
ULONG Eax;
ULONG Ecx;
ULONG Edx;
ULONG Ebx;
ULONG Esp;
ULONG Ebp;
ULONG Esi;
ULONG Edi;
USHORT Es;
USHORT Reserved5;
USHORT Cs;
USHORT Reserved6;
USHORT Ss;
USHORT Reserved7;
USHORT Ds;
USHORT Reserved8;
USHORT Fs;
USHORT Reserved9;
USHORT Gs;
USHORT Reserved10;
USHORT Ldt;
USHORT Reserved11;
USHORT Trap;
USHORT IoMapBase;
UCHAR IoBitmap[1];
} KTSS __attribute__((packed));
#endif /* not __ASM__ */
#endif /* __INCLUDE_DDK_I386_TSS_H */
+23
View File
@@ -0,0 +1,23 @@
#ifndef __INCLUDE_DDK_IOCTRL_H
#define __INCLUDE_DDK_IOCTRL_H
#define CTL_CODE(Dev, Func, Meth, Acc) ( ((Dev)<<16) | ((Acc)<<14) | ((Func)<<2) | (Meth))
#define DEVICE_TYPE_FROM_CTL_CODE(ctlCode) (((ULONG)(ctlCode&0xffff0000))>>16)
#define IO_METHOD_FROM_CTL_CODE(ctlCode) (ctlCode&0x00000003)
// IOCTL Parameter buffering methods
#define METHOD_BUFFERED 0
#define METHOD_IN_DIRECT 1
#define METHOD_OUT_DIRECT 2
#define METHOD_NEITHER 3
// IOCTL File access type
#define FILE_ANY_ACCESS 0
#define FILE_READ_ACCESS 1
#define FILE_WRITE_ACCESS 2
#endif /* __INCLUDE_DDK_IOCTRL_H */
+393
View File
@@ -0,0 +1,393 @@
#ifndef __INCLUDE_DDK_IODEF_H
#define __INCLUDE_DDK_IODEF_H
typedef enum _IO_QUERY_DEVICE_DESCRIPTION
{
IoQueryDeviceIdentifier = 0,
IoQueryDeviceConfigurationData,
IoQueryDeviceComponentInformation,
IoQueryDeviceDataFormatMaximum,
} IO_QUERY_DEVICE_DESCRIPTION, *PIO_QUERY_DEVICE_DESCRIPTION;
typedef enum _CONFIGURATION_TYPE
{
DiskController,
ParallelController,
MaximumType,
} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
typedef enum _CM_RESOURCE_TYPE
{
CmResourceTypePort = 1,
CmResourceTypeInterrupt,
CmResourceTypeMemory,
CmResourceTypeDma,
CmResourceTypeDeviceSpecific,
CmResourceTypeMaximum,
} CM_RESOURCE_TYPE;
typedef enum _CM_SHARE_DISPOSITION
{
CmResourceShareDeviceExclusive = 1,
CmResourceShareDriverExclusive,
CmResourceShareShared,
CmResourceShareMaximum,
} CM_SHARE_DISPOSITION;
enum
{
CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE,
CM_RESOURCE_INTERRUPT_LATCHED,
};
enum
{
CM_RESOURCE_PORT_MEMORY,
CM_RESOURCE_PORT_IO,
};
/*
* PURPOSE: Irp flags
*/
enum
{
IRP_NOCACHE = 0x1,
IRP_PAGING_IO = 0x2,
IRP_MOUNT_COMPLETION = 0x2,
IRP_SYNCHRONOUS_API = 0x4,
IRP_ASSOCIATED_IRP = 0x8,
IRP_BUFFERED_IO = 0x10,
IRP_DEALLOCATE_BUFFER = 0x20,
IRP_INPUT_OPERATION = 0x40,
IRP_SYNCHRONOUS_PAGING_IO = 0x40,
IRP_CREATE_OPERATION = 0x80,
IRP_READ_OPERATION = 0x100,
IRP_WRITE_OPERATION = 0x200,
IRP_CLOSE_OPERATION = 0x400,
IRP_DEFER_IO_COMPLETION = 0x800,
IRP_OB_QUERY_NAME = 0x1000,
IRP_HOLD_DEVICE_QUEUE = 0x2000,
IRP_RETRY_IO_COMPLETION = 0x4000
};
#define SL_FORCE_ACCESS_CHECK (0x1)
#define SL_OPEN_PAGING_FILE (0x2)
#define SL_OPEN_TARGET_DIRECTORY (0x4)
#define SL_CASE_SENSITIVE (0x80)
#define SL_KEY_SPECIFIED (0x1)
#define SL_OVERRIDE_VERIFY_VOLUME (0x2)
#define SL_WRITE_THROUGHT (0x4)
#define SL_FT_SEQUENTIAL_WRITE (0x8)
#define SL_FAIL_IMMEDIATELY (0x1)
#define SL_EXCLUSIVE_LOCK (0x2)
#define SL_WATCH_TREE (0x1)
#define SL_RESTART_SCAN (0x1)
#define SL_RETURN_SINGLE_ENTRY (0x2)
#define SL_INDEX_SPECIFIED (0x4)
#define SL_ALLOW_RAW_MOUNT (0x1)
#define SL_PENDING_RETURNED 0x01
#define SL_INVOKE_ON_CANCEL 0x20
#define SL_INVOKE_ON_SUCCESS 0x40
#define SL_INVOKE_ON_ERROR 0x80
/*
* Possible flags for the device object flags
*/
#define DO_UNLOAD_PENDING 0x00000001
#define DO_VERIFY_VOLUME 0x00000002
#define DO_BUFFERED_IO 0x00000004
#define DO_EXCLUSIVE 0x00000008
#define DO_DIRECT_IO 0x00000010
#define DO_MAP_IO_BUFFER 0x00000020
#define DO_DEVICE_HAS_NAME 0x00000040
#define DO_DEVICE_INITIALIZING 0x00000080
#define DO_SYSTEM_BOOT_PARTITION 0x00000100
#define DO_LONG_TERM_REQUESTS 0x00000200
#define DO_NEVER_LAST_DEVICE 0x00000400
#define DO_SHUTDOWN_REGISTERED 0x00000800
#define DO_BUS_ENUMERATED_DEVICE 0x00001000
#define DO_POWER_PAGABLE 0x00002000
#define DO_POWER_INRUSH 0x00004000
#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
/*
* Possible device types
*/
#define FILE_DEVICE_BEEP 0x00000001
#define FILE_DEVICE_CD_ROM 0x00000002
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003
#define FILE_DEVICE_CONTROLLER 0x00000004
#define FILE_DEVICE_DATALINK 0x00000005
#define FILE_DEVICE_DFS 0x00000006
#define FILE_DEVICE_DISK 0x00000007
#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008
#define FILE_DEVICE_FILE_SYSTEM 0x00000009
#define FILE_DEVICE_INPORT_PORT 0x0000000a
#define FILE_DEVICE_KEYBOARD 0x0000000b
#define FILE_DEVICE_MAILSLOT 0x0000000c
#define FILE_DEVICE_MIDI_IN 0x0000000d
#define FILE_DEVICE_MIDI_OUT 0x0000000e
#define FILE_DEVICE_MOUSE 0x0000000f
#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010
#define FILE_DEVICE_NAMED_PIPE 0x00000011
#define FILE_DEVICE_NETWORK 0x00000012
#define FILE_DEVICE_NETWORK_BROWSER 0x00000013
#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014
#define FILE_DEVICE_NULL 0x00000015
#define FILE_DEVICE_PARALLEL_PORT 0x00000016
#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017
#define FILE_DEVICE_PRINTER 0x00000018
#define FILE_DEVICE_SCANNER 0x00000019
#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a
#define FILE_DEVICE_SERIAL_PORT 0x0000001b
#define FILE_DEVICE_SCREEN 0x0000001c
#define FILE_DEVICE_SOUND 0x0000001d
#define FILE_DEVICE_STREAMS 0x0000001e
#define FILE_DEVICE_TAPE 0x0000001f
#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020
#define FILE_DEVICE_TRANSPORT 0x00000021
#define FILE_DEVICE_UNKNOWN 0x00000022
#define FILE_DEVICE_VIDEO 0x00000023
#define FILE_DEVICE_VIRTUAL_DISK 0x00000024
#define FILE_DEVICE_WAVE_IN 0x00000025
#define FILE_DEVICE_WAVE_OUT 0x00000026
#define FILE_DEVICE_8042_PORT 0x00000027
#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028
#define FILE_DEVICE_BATTERY 0x00000029
#define FILE_DEVICE_BUS_EXTENDER 0x0000002a
#define FILE_DEVICE_MODEM 0x0000002b
#define FILE_DEVICE_VDM 0x0000002c
#define FILE_DEVICE_MASS_STORAGE 0x0000002d
#define FILE_DEVICE_SMB 0x0000002e
#define FILE_DEVICE_KS 0x0000002f
#define FILE_DEVICE_CHANGER 0x00000030
#define FILE_DEVICE_SMARTCARD 0x00000031
#define FILE_DEVICE_ACPI 0x00000032
#define FILE_DEVICE_DVD 0x00000033
#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034
#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035
#define FILE_DEVICE_DFS_VOLUME 0x00000036
#define FILE_DEVICE_SERENUM 0x00000037
#define FILE_DEVICE_TERMSRV 0x00000038
#define FILE_DEVICE_KSEC 0x00000039
#define FILE_REMOVABLE_MEDIA 0x00000001
#define FILE_READ_ONLY_DEVICE 0x00000002
#define FILE_FLOPPY_DISKETTE 0x00000004
#define FILE_WRITE_ONCE_MEDIA 0x00000008
#define FILE_REMOTE_DEVICE 0x00000010
#define FILE_DEVICE_IS_MOUNTED 0x00000020
#define FILE_VIRTUAL_VOLUME 0x00000040
#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
#define FILE_DEVICE_SECURE_OPEN 0x00000100
/*
* PURPOSE: Bus types
*/
typedef enum _INTERFACE_TYPE
{
InterfaceTypeUndefined = -1,
Internal,
Isa,
Eisa,
MicroChannel,
TurboChannel,
PCIBus,
VMEBus,
NuBus,
PCMCIABus,
CBus,
MPIBus,
MPSABus,
ProcessorInternal,
InternalPowerBus,
PNPISABus,
MaximumInterfaceType
} INTERFACE_TYPE, *PINTERFACE_TYPE;
enum
{
IRP_MJ_CREATE,
IRP_MJ_CREATE_NAMED_PIPE,
IRP_MJ_CLOSE,
IRP_MJ_READ,
IRP_MJ_WRITE,
IRP_MJ_QUERY_INFORMATION,
IRP_MJ_SET_INFORMATION,
IRP_MJ_QUERY_EA,
IRP_MJ_SET_EA,
IRP_MJ_FLUSH_BUFFERS,
IRP_MJ_QUERY_VOLUME_INFORMATION,
IRP_MJ_SET_VOLUME_INFORMATION,
IRP_MJ_DIRECTORY_CONTROL,
IRP_MJ_FILE_SYSTEM_CONTROL,
IRP_MJ_DEVICE_CONTROL,
IRP_MJ_INTERNAL_DEVICE_CONTROL,
IRP_MJ_SHUTDOWN,
IRP_MJ_LOCK_CONTROL,
IRP_MJ_CLEANUP,
IRP_MJ_CREATE_MAILSLOT,
IRP_MJ_QUERY_SECURITY,
IRP_MJ_SET_SECURITY,
IRP_MJ_POWER,
IRP_MJ_SYSTEM_CONTROL,
IRP_MJ_DEVICE_CHANGE,
IRP_MJ_QUERY_QUOTA,
IRP_MJ_SET_QUOTA,
IRP_MJ_PNP,
IRP_MJ_MAXIMUM_FUNCTION,
};
#define IRP_MJ_SCSI IRP_MJ_INTERNAL_DEVICE_CONTROL
/*
* Minor function numbers for IRP_MJ_FILE_SYSTEM_CONTROL
*/
#define IRP_MN_USER_FS_REQUEST 0x00
#define IRP_MN_MOUNT_VOLUME 0x01
#define IRP_MN_VERIFY_VOLUME 0x02
#define IRP_MN_LOAD_FILE_SYSTEM 0x03
/*
* Minor function numbers for IRP_MJ_SCSI
*/
#define IRP_MN_SCSI_CLASS 0x01
/*
* Minor function codes for IRP_MJ_POWER
*/
#define IRP_MN_WAIT_WAKE 0x00
#define IRP_MN_POWER_SEQUENCE 0x01
#define IRP_MN_SET_POWER 0x02
#define IRP_MN_QUERY_POWER 0x03
/*
* Minor function codes for IRP_MJ_PNP
*/
#define IRP_MN_START_DEVICE 0x00
#define IRP_MN_QUERY_REMOVE_DEVICE 0x01
#define IRP_MN_REMOVE_DEVICE 0x02
#define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
#define IRP_MN_STOP_DEVICE 0x04
#define IRP_MN_QUERY_STOP_DEVICE 0x05
#define IRP_MN_CANCEL_STOP_DEVICE 0x06
#define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
#define IRP_MN_QUERY_INTERFACE 0x08
#define IRP_MN_QUERY_CAPABILITIES 0x09
#define IRP_MN_QUERY_RESOURCES 0x0A
#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
#define IRP_MN_QUERY_DEVICE_TEXT 0x0C
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
#define IRP_MN_READ_CONFIG 0x0F
#define IRP_MN_WRITE_CONFIG 0x10
#define IRP_MN_EJECT 0x11
#define IRP_MN_SET_LOCK 0x12
#define IRP_MN_QUERY_ID 0x13
#define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
#define IRP_MN_QUERY_BUS_INFORMATION 0x15
#define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
#define IRP_MN_SURPRISE_REMOVAL 0x17
#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
/*
* Priority increments
*/
#define EVENT_INCREMENT 1
#define IO_NO_INCREMENT 0
#define IO_CD_ROM_INCREMENT 1
#define IO_DISK_INCREMENT 4
#define IO_KEYBOARD_INCREMENT 6
#define IO_MAILSLOT_INCREMENT 2
#define IO_MOUSE_INCREMENT 6
#define IO_NAMED_PIPE_INCREMENT 2
#define IO_NETWORK_INCREMENT 2
#define IO_PARALLEL_INCREMENT 1
#define IO_SERIAL_INCREMENT 2
#define IO_SOUND_INCREMENT 8
#define IO_VIDEO_INCREMENT 1
#define MUTANT_INCREMENT 1
#define SEMAPHORE_INCREMENT 1
#define FILE_BYTE_ALIGNMENT 0x00000000
#define FILE_WORD_ALIGNMENT 0x00000001
#define FILE_LONG_ALIGNMENT 0x00000003
#define FILE_QUAD_ALIGNMENT 0x00000007
#define FILE_OCTA_ALIGNMENT 0x0000000f
#define FILE_32_BYTE_ALIGNMENT 0x0000001f
#define FILE_64_BYTE_ALIGNMENT 0x0000003f
#define FILE_128_BYTE_ALIGNMENT 0x0000007f
#define FILE_256_BYTE_ALIGNMENT 0x000000ff
#define FILE_512_BYTE_ALIGNMENT 0x000001ff
/*
* File disposition values
*/
#define FILE_SUPERSEDED 0x0000
#define FILE_OPENED 0x0001
#define FILE_CREATED 0x0002
#define FILE_OVERWRITTEN 0x0003
#define FILE_EXISTS 0x0004
#define FILE_DOES_NOT_EXIST 0x0005
/*
* file creation 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_TRANSACTED_MODE 0x00200000
#define FILE_OPEN_OFFLINE_FILE 0x00400000
#define FILE_VALID_OPTION_FLAGS 0x007fffff
#define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
#define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
#define FILE_VALID_SET_FLAGS 0x00001036
typedef ULONG FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
/*
* file system information class values
*/
#define FileFsVolumeInformation 1
#define FileFsLabelInformation 2
#define FileFsSizeInformation 3
#define FileFsDeviceInformation 4
#define FileFsAttributeInformation 5
#define FileFsControlInformation 6
#define FileFsQuotaQueryInformation 7
#define FileFsQuotaSetInformation 8
#define FileFsMaximumInformation 9
#define IRP_MN_QUERY_DIRECTORY 0x01
#define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
#endif
File diff suppressed because it is too large Load Diff
+845
View File
@@ -0,0 +1,845 @@
/* $Id: iotypes.h,v 1.41 2002/09/08 10:47:44 chorns Exp $
*
*/
#ifndef __INCLUDE_DDK_IOTYPES_H
#define __INCLUDE_DDK_IOTYPES_H
#include <ntos/disk.h>
#include <ntos/file.h>
#ifdef __NTOSKRNL__
extern POBJECT_TYPE EXPORTED IoAdapterObjectType;
extern POBJECT_TYPE EXPORTED IoDeviceHandlerObjectType;
extern POBJECT_TYPE EXPORTED IoDeviceObjectType;
extern POBJECT_TYPE EXPORTED IoDriverObjectType;
extern POBJECT_TYPE EXPORTED IoFileObjectType;
#else
extern POBJECT_TYPE IMPORTED IoAdapterObjectType;
extern POBJECT_TYPE IMPORTED IoDeviceHandlerObjectType;
extern POBJECT_TYPE IMPORTED IoDeviceObjectType;
extern POBJECT_TYPE IMPORTED IoDriverObjectType;
extern POBJECT_TYPE IMPORTED IoFileObjectType;
#endif
/*
* These are referenced before they can be fully defined
*/
struct _DRIVER_OBJECT;
struct _FILE_OBJECT;
struct _DEVICE_OBJECT;
struct _IRP;
struct _IO_STATUS_BLOCK;
struct _SCSI_REQUEST_BLOCK;
/* SIMPLE TYPES *************************************************************/
enum
{
DeallocateObject,
KeepObject,
};
typedef enum _CREATE_FILE_TYPE
{
CreateFileTypeNone,
CreateFileTypeNamedPipe,
CreateFileTypeMailslot
} CREATE_FILE_TYPE;
typedef struct _SHARE_ACCESS
{
ULONG OpenCount;
ULONG Readers;
ULONG Writers;
ULONG Deleters;
ULONG SharedRead;
ULONG SharedWrite;
ULONG SharedDelete;
} SHARE_ACCESS, *PSHARE_ACCESS;
/* FUNCTION TYPES ************************************************************/
typedef VOID STDCALL
(*PDRIVER_REINITIALIZE)(struct _DRIVER_OBJECT* DriverObject,
PVOID Context,
ULONG Count);
typedef NTSTATUS STDCALL
(*PIO_QUERY_DEVICE_ROUTINE)(PVOID Context,
PUNICODE_STRING Pathname,
INTERFACE_TYPE BusType,
ULONG BusNumber,
PKEY_VALUE_FULL_INFORMATION* BI,
CONFIGURATION_TYPE ControllerType,
ULONG ControllerNumber,
PKEY_VALUE_FULL_INFORMATION* CI,
CONFIGURATION_TYPE PeripheralType,
ULONG PeripheralNumber,
PKEY_VALUE_FULL_INFORMATION* PI);
typedef NTSTATUS STDCALL
(*PIO_COMPLETION_ROUTINE)(struct _DEVICE_OBJECT* DeviceObject,
struct _IRP* Irp,
PVOID Context);
typedef VOID STDCALL
(*PIO_APC_ROUTINE)(PVOID ApcContext,
struct _IO_STATUS_BLOCK* IoStatusBlock,
ULONG Reserved);
/* STRUCTURE TYPES ***********************************************************/
typedef struct _ADAPTER_OBJECT ADAPTER_OBJECT, *PADAPTER_OBJECT;
/*
* PURPOSE: Special timer associated with each device
* NOTES: This is a guess
*/
typedef struct _IO_TIMER
{
KTIMER timer;
KDPC dpc;
} IO_TIMER, *PIO_TIMER;
typedef struct _IO_SECURITY_CONTEXT
{
PSECURITY_QUALITY_OF_SERVICE SecurityQos;
PACCESS_STATE AccessState;
ACCESS_MASK DesiredAccess;
ULONG FullCreateOptions;
} IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
typedef struct _IO_RESOURCE_DESCRIPTOR
{
UCHAR Option;
UCHAR Type;
UCHAR ShareDisposition;
/*
* Reserved for system use
*/
UCHAR Spare1;
USHORT Flags;
/*
* Reserved for system use
*/
UCHAR Spare2;
union
{
struct
{
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Port;
struct
{
ULONG Length;
ULONG Alignment;
PHYSICAL_ADDRESS MinimumAddress;
PHYSICAL_ADDRESS MaximumAddress;
} Memory;
struct
{
ULONG MinimumVector;
ULONG MaximumVector;
} Interrupt;
struct
{
ULONG MinimumChannel;
ULONG MaximumChannel;
} Dma;
} u;
} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
// IO_RESOURCE_DESCRIPTOR Options
#define IO_RESOURCE_REQUIRED 0x00
#define IO_RESOURCE_PREFERRED 0x01
#define IO_RESOURCE_DEFAULT 0x02
#define IO_RESOURCE_ALTERNATIVE 0x08
typedef struct _IO_RESOURCE_LIST
{
USHORT Version;
USHORT Revision;
ULONG Count;
IO_RESOURCE_DESCRIPTOR Descriptors[1];
} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
typedef struct _IO_RESOURCE_REQUIREMENTS_LIST
{
/*
* List size in bytes
*/
ULONG ListSize;
/*
* System defined enum for the bus
*/
INTERFACE_TYPE InterfaceType;
ULONG BusNumber;
ULONG SlotNumber;
ULONG Reserved[3];
ULONG AlternativeLists;
IO_RESOURCE_LIST List[1];
} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
typedef struct
{
UCHAR Type;
UCHAR ShareDisposition;
USHORT Flags;
union
{
struct
{
PHYSICAL_ADDRESS Start;
ULONG Length;
} __attribute__((packed)) Port;
struct
{
ULONG Level;
ULONG Vector;
ULONG Affinity;
} __attribute__((packed))Interrupt;
struct
{
PHYSICAL_ADDRESS Start;
ULONG Length;
} __attribute__((packed))Memory;
struct
{
ULONG Channel;
ULONG Port;
ULONG Reserved1;
} __attribute__((packed))Dma;
struct
{
ULONG DataSize;
ULONG Reserved1;
ULONG Reserved2;
} __attribute__((packed))DeviceSpecificData;
} __attribute__((packed)) u;
} __attribute__((packed)) CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
typedef struct
{
USHORT Version;
USHORT Revision;
ULONG Count;
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
} __attribute__((packed))CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
typedef struct
{
INTERFACE_TYPE InterfaceType;
ULONG BusNumber;
CM_PARTIAL_RESOURCE_LIST PartialResourceList;
} __attribute__((packed)) CM_FULL_RESOURCE_DESCRIPTOR;
typedef struct
{
ULONG Count;
CM_FULL_RESOURCE_DESCRIPTOR List[1];
} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
/*
* PURPOSE: IRP stack location
*/
typedef struct __attribute__((packed)) _IO_STACK_LOCATION
{
UCHAR MajorFunction;
UCHAR MinorFunction;
UCHAR Flags;
UCHAR Control;
union
{
struct
{
PIO_SECURITY_CONTEXT SecurityContext;
ULONG Options;
USHORT FileAttributes;
USHORT ShareAccess;
ULONG EaLength;
} Create;
struct
{
ULONG Length;
ULONG Key;
LARGE_INTEGER ByteOffset;
} Read;
struct
{
ULONG Length;
ULONG Key;
LARGE_INTEGER ByteOffset;
} Write;
struct
{
ULONG OutputBufferLength;
ULONG InputBufferLength;
ULONG IoControlCode;
PVOID Type3InputBuffer;
} DeviceIoControl;
struct
{
ULONG OutputBufferLength;
ULONG InputBufferLength;
ULONG IoControlCode;
PVOID Type3InputBuffer;
} FileSystemControl;
struct
{
struct _VPB* Vpb;
struct _DEVICE_OBJECT* DeviceObject;
} MountVolume;
struct
{
struct _VPB* Vpb;
struct _DEVICE_OBJECT* DeviceObject;
} VerifyVolume;
struct
{
ULONG Length;
FILE_INFORMATION_CLASS FileInformationClass;
} QueryFile;
struct
{
ULONG Length;
FS_INFORMATION_CLASS FsInformationClass;
} QueryVolume;
struct
{
ULONG Length;
FS_INFORMATION_CLASS FsInformationClass;
} SetVolume;
struct
{
ULONG Length;
FILE_INFORMATION_CLASS FileInformationClass;
struct _FILE_OBJECT* FileObject;
union
{
struct
{
BOOLEAN ReplaceIfExists;
BOOLEAN AdvanceOnly;
} d;
ULONG ClusterCount;
HANDLE DeleteHandle;
} u;
} SetFile;
struct
{
ULONG Length;
PUNICODE_STRING FileName;
FILE_INFORMATION_CLASS FileInformationClass;
ULONG FileIndex;
} QueryDirectory;
// Parameters for IRP_MN_QUERY_DEVICE_RELATIONS
struct
{
DEVICE_RELATION_TYPE Type;
} QueryDeviceRelations;
// Parameters for IRP_MN_QUERY_INTERFACE
struct
{
CONST GUID *InterfaceType;
USHORT Size;
USHORT Version;
PINTERFACE Interface;
PVOID InterfaceSpecificData;
} QueryInterface;
// Parameters for IRP_MN_QUERY_CAPABILITIES
struct
{
PDEVICE_CAPABILITIES Capabilities;
} DeviceCapabilities;
// Parameters for IRP_MN_QUERY_ID
struct
{
BUS_QUERY_ID_TYPE IdType;
} QueryId;
// Parameters for IRP_MN_QUERY_DEVICE_TEXT
struct
{
DEVICE_TEXT_TYPE DeviceTextType;
LCID LocaleId;
} QueryDeviceText;
// Parameters for IRP_MN_DEVICE_USAGE_NOTIFICATION
struct
{
BOOLEAN InPath;
BOOLEAN Reserved[3];
DEVICE_USAGE_NOTIFICATION_TYPE Type;
} UsageNotification;
// Parameters for IRP_MN_WAIT_WAKE
struct
{
SYSTEM_POWER_STATE PowerState;
} WaitWake;
// Parameter for IRP_MN_POWER_SEQUENCE
struct
{
PPOWER_SEQUENCE PowerSequence;
} PowerSequence;
// Parameters for IRP_MN_SET_POWER and IRP_MN_QUERY_POWER
struct
{
ULONG SystemContext;
POWER_STATE_TYPE Type;
POWER_STATE State;
POWER_ACTION ShutdownType;
} Power;
// Parameters for IRP_MN_START_DEVICE
struct
{
PCM_RESOURCE_LIST AllocatedResources;
PCM_RESOURCE_LIST AllocatedResourcesTranslated;
} StartDevice;
/* Parameters for IRP_MN_SCSI_CLASS */
struct
{
struct _SCSI_REQUEST_BLOCK *Srb;
} Scsi;
/* Paramters for other calls */
struct
{
PVOID Argument1;
PVOID Argument2;
PVOID Argument3;
PVOID Argument4;
} Others;
} Parameters;
struct _DEVICE_OBJECT* DeviceObject;
struct _FILE_OBJECT* FileObject;
PIO_COMPLETION_ROUTINE CompletionRoutine;
PVOID CompletionContext;
} __attribute__((packed)) IO_STACK_LOCATION, *PIO_STACK_LOCATION;
typedef struct _IO_STATUS_BLOCK
{
NTSTATUS Status;
ULONG Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
typedef struct _IO_PIPE_CREATE_BUFFER
{
BOOLEAN WriteModeMessage;
BOOLEAN ReadModeMessage;
BOOLEAN NonBlocking;
ULONG MaxInstances;
ULONG InBufferSize;
ULONG OutBufferSize;
LARGE_INTEGER TimeOut;
} IO_PIPE_CREATE_BUFFER, *PIO_PIPE_CREATE_BUFFER;
typedef struct _IO_MAILSLOT_CREATE_BUFFER
{
ULONG Param; /* ?? */
ULONG MaxMessageSize;
LARGE_INTEGER TimeOut;
} IO_MAILSLOT_CREATE_BUFFER, *PIO_MAILSLOT_CREATE_BUFFER;
/*
* Driver entry point declaration
*/
typedef NTSTATUS STDCALL
(*PDRIVER_INITIALIZE)(struct _DRIVER_OBJECT* DriverObject,
PUNICODE_STRING RegistryPath);
/*
* Driver cancel declaration
*/
typedef NTSTATUS STDCALL
(*PDRIVER_CANCEL)(struct _DEVICE_OBJECT* DeviceObject,
struct _IRP* RegistryPath);
typedef struct _SECTION_OBJECT_POINTERS
{
PVOID DataSectionObject;
PVOID SharedCacheMap;
PVOID ImageSectionObject;
} SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
typedef struct _IO_COMPLETION_CONTEXT
{
PVOID Port;
ULONG Key;
} IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
#define FO_FILE_OPEN 0x00000001
#define FO_SYNCHRONOUS_IO 0x00000002
#define FO_ALERTABLE_IO 0x00000004
#define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
#define FO_WRITE_THROUGH 0x00000010
#define FO_SEQUENTIAL_ONLY 0x00000020
#define FO_CACHE_SUPPORTED 0x00000040
#define FO_NAMED_PIPE 0x00000080
#define FO_STREAM_FILE 0x00000100
#define FO_MAILSLOT 0x00000200
#define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
#define FO_DIRECT_DEVICE_OPEN 0x00000800
#define FO_FILE_MODIFIED 0x00001000
#define FO_FILE_SIZE_CHANGED 0x00002000
#define FO_CLEANUP_COMPLETE 0x00004000
#define FO_TEMPORARY_FILE 0x00008000
#define FO_DELETE_ON_CLOSE 0x00010000
#define FO_OPENED_CASE_SENSITIVE 0x00020000
#define FO_HANDLE_CREATED 0x00040000
#define FO_FILE_FAST_IO_READ 0x00080000
/*
* ReactOS specific flags
*/
#define FO_DIRECT_CACHE_READ 0x72000001
#define FO_DIRECT_CACHE_WRITE 0x72000002
#define FO_DIRECT_CACHE_PAGING_READ 0x72000004
#define FO_DIRECT_CACHE_PAGING_WRITE 0x72000008
#define FO_FCB_IS_VALID 0x72000010
typedef struct _FILE_OBJECT
{
CSHORT Type;
CSHORT Size;
struct _DEVICE_OBJECT* DeviceObject;
struct _VPB* Vpb;
PVOID FsContext;
PVOID FsContext2;
PSECTION_OBJECT_POINTERS SectionObjectPointers;
PVOID PrivateCacheMap;
NTSTATUS FinalStatus;
struct _FILE_OBJECT* RelatedFileObject;
BOOLEAN LockOperation;
BOOLEAN DeletePending;
BOOLEAN ReadAccess;
BOOLEAN WriteAccess;
BOOLEAN DeleteAccess;
BOOLEAN SharedRead;
BOOLEAN SharedWrite;
BOOLEAN SharedDelete;
ULONG Flags;
UNICODE_STRING FileName;
LARGE_INTEGER CurrentByteOffset;
ULONG Waiters;
ULONG Busy;
PVOID LastLock;
KEVENT Lock;
KEVENT Event;
PIO_COMPLETION_CONTEXT CompletionContext;
} FILE_OBJECT, *PFILE_OBJECT;
typedef struct _IRP
{
CSHORT Type;
USHORT Size;
PMDL MdlAddress;
ULONG Flags;
union
{
struct _IRP* MasterIrp;
LONG IrpCount;
PVOID SystemBuffer;
} AssociatedIrp;
LIST_ENTRY ThreadListEntry;
IO_STATUS_BLOCK IoStatus;
KPROCESSOR_MODE RequestorMode;
BOOLEAN PendingReturned;
CHAR StackCount;
CHAR CurrentLocation;
BOOLEAN Cancel;
KIRQL CancelIrql;
CCHAR ApcEnvironment;// CCHAR or PVOID?
UCHAR AllocationFlags;//UCHAR or ULONG?
PIO_STATUS_BLOCK UserIosb;
PKEVENT UserEvent;
union
{
struct
{
PIO_APC_ROUTINE UserApcRoutine;
PVOID UserApcContext;
} AsynchronousParameters;
LARGE_INTEGER AllocationSize;
} Overlay;
PDRIVER_CANCEL CancelRoutine;
PVOID UserBuffer;
union
{
struct
{
union {
KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
PVOID DriverContext[4];
};
struct _ETHREAD* Thread;
PCHAR AuxiliaryBuffer;
LIST_ENTRY ListEntry;
struct _IO_STACK_LOCATION* CurrentStackLocation;
PFILE_OBJECT OriginalFileObject;
} Overlay;
KAPC Apc;
ULONG CompletionKey;
} Tail;
IO_STACK_LOCATION Stack[1];
} IRP, *PIRP;
#define VPB_MOUNTED 0x00000001
#define VPB_LOCKED 0x00000002
#define VPB_PERSISTENT 0x00000004
#define VPB_REMOVE_PENDING 0x00000008
typedef struct _VPB
{
CSHORT Type;
CSHORT Size;
USHORT Flags;
USHORT VolumeLabelLength;
struct _DEVICE_OBJECT* DeviceObject;
struct _DEVICE_OBJECT* RealDevice;
ULONG SerialNumber;
ULONG ReferenceCount;
WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH];
} VPB, *PVPB;
typedef struct _DEVICE_OBJECT
{
CSHORT Type;
CSHORT Size;
LONG ReferenceCount;
struct _DRIVER_OBJECT* DriverObject;
struct _DEVICE_OBJECT* NextDevice;
struct _DEVICE_OBJECT* AttachedDevice;
struct _IRP* CurrentIrp;
PIO_TIMER Timer;
ULONG Flags;
ULONG Characteristics;
PVPB Vpb;
PVOID DeviceExtension;
DEVICE_TYPE DeviceType;
CCHAR StackSize;
union
{
LIST_ENTRY ListHead;
WAIT_CONTEXT_BLOCK Wcb;
} Queue;
ULONG AlignmentRequirement;
KDEVICE_QUEUE DeviceQueue;
KDPC Dpc;
ULONG ActiveThreadCount;
PSECURITY_DESCRIPTOR SecurityDescriptor;
KEVENT DeviceLock;
USHORT SectorSize;
USHORT Spare1;
struct _DEVOBJ_EXTENSION* DeviceObjectExtension;
PVOID Reserved;
} DEVICE_OBJECT, *PDEVICE_OBJECT;
/*
* Fast i/o routine type declaration
*/
//typedef NTSTATUS (*PFAST_IO_DISPATCH)(struct _DEVICE_OBJECT*, IRP*);
//FIXME : this type is ok for read and write, but not for all routines
typedef BOOLEAN STDCALL
(*PFAST_IO_ROUTINE)(IN struct _FILE_OBJECT *FileObject,
IN PLARGE_INTEGER FileOffset,
IN ULONG Length,
IN BOOLEAN Wait,
IN ULONG LockKey,
OUT PVOID Buffer,
OUT PIO_STATUS_BLOCK IoStatus,
IN struct _DEVICE_OBJECT *DeviceObject);
typedef struct _FAST_IO_DISPATCH {
ULONG SizeOfFastIoDispatch;
PFAST_IO_ROUTINE FastIoCheckIfPossible;
PFAST_IO_ROUTINE FastIoRead;
PFAST_IO_ROUTINE FastIoWrite;
PFAST_IO_ROUTINE FastIoQueryBasicInfo;
PFAST_IO_ROUTINE FastIoQueryStandardInfo;
PFAST_IO_ROUTINE FastIoLock;
PFAST_IO_ROUTINE FastIoUnlockSingle;
PFAST_IO_ROUTINE FastIoUnlockAll;
PFAST_IO_ROUTINE FastIoUnlockAllByKey;
PFAST_IO_ROUTINE FastIoDeviceControl;
PFAST_IO_ROUTINE AcquireFileForNtCreateSection;
PFAST_IO_ROUTINE ReleaseFileForNtCreateSection;
PFAST_IO_ROUTINE FastIoDetachDevice;
PFAST_IO_ROUTINE FastIoQueryNetworkOpenInfo;
PFAST_IO_ROUTINE AcquireForModWrite;
PFAST_IO_ROUTINE MdlRead;
PFAST_IO_ROUTINE MdlReadComplete;
PFAST_IO_ROUTINE PrepareMdlWrite;
PFAST_IO_ROUTINE MdlWriteComplete;
PFAST_IO_ROUTINE FastIoReadCompressed;
PFAST_IO_ROUTINE FastIoWriteCompressed;
PFAST_IO_ROUTINE MdlReadCompleteCompressed;
PFAST_IO_ROUTINE MdlWriteCompleteCompressed;
PFAST_IO_ROUTINE FastIoQueryOpen;
PFAST_IO_ROUTINE ReleaseForModWrite;
PFAST_IO_ROUTINE AcquireForCcFlush;
PFAST_IO_ROUTINE ReleaseForCcFlush;
} FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
/*
* Dispatch routine type declaration
*/
typedef NTSTATUS STDCALL
(*PDRIVER_DISPATCH)(IN struct _DEVICE_OBJECT *DeviceObject,
IN struct _IRP *Irp);
/*
* StartIo routine type declaration
*/
typedef VOID STDCALL
(*PDRIVER_STARTIO)(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);
/*
* Unload routine type declaration
*/
typedef VOID STDCALL
(*PDRIVER_UNLOAD)(IN struct _DRIVER_OBJECT *DriverObject);
/*
* AddDevice routine type declaration
*/
typedef NTSTATUS STDCALL
(*PDRIVER_ADD_DEVICE)(IN struct _DRIVER_OBJECT *DriverObject,
IN struct _DEVICE_OBJECT *PhysicalDeviceObject);
typedef struct _DRIVER_EXTENSION
{
struct _DRIVER_OBJECT* DriverObject;
PDRIVER_ADD_DEVICE AddDevice;
ULONG Count;
UNICODE_STRING ServiceKeyName;
} DRIVER_EXTENSION, *PDRIVER_EXTENSION;
#if 0
typedef
struct _FAST_IO_DISPATCH_TABLE
{
ULONG Count;
PFAST_IO_DISPATCH Dispatch;
} FAST_IO_DISPATCH_TABLE, * PFAST_IO_DISPATCH_TABLE;
#endif
typedef struct _DRIVER_OBJECT
{
CSHORT Type;
CSHORT Size;
PDEVICE_OBJECT DeviceObject;
ULONG Flags;
PVOID DriverStart;
ULONG DriverSize;
PVOID DriverSection;
PDRIVER_EXTENSION DriverExtension;
UNICODE_STRING DriverName;
PUNICODE_STRING HardwareDatabase;
#if 0
PFAST_IO_DISPATCH_TABLE FastIoDispatch;
#else
PFAST_IO_DISPATCH FastIoDispatch;
#endif
PDRIVER_INITIALIZE DriverInit;
PDRIVER_STARTIO DriverStartIo;
PDRIVER_UNLOAD DriverUnload;
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
} DRIVER_OBJECT, *PDRIVER_OBJECT;
typedef struct _CONFIGURATION_INFORMATION
{
ULONG DiskCount;
ULONG FloppyCount;
ULONG CDRomCount;
ULONG TapeCount;
ULONG ScsiPortCount;
ULONG SerialCount;
ULONG ParallelCount;
BOOLEAN AtDiskPrimaryAddressClaimed;
BOOLEAN AtDiskSecondaryAddressClaimed;
} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
typedef VOID STDCALL
(*PIO_DPC_ROUTINE)(PKDPC Dpc,
PDEVICE_OBJECT DeviceObject,
PIRP Irp,
PVOID Context);
typedef VOID STDCALL
(*PIO_TIMER_ROUTINE)(PDEVICE_OBJECT DeviceObject,
PVOID Context);
#if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
typedef struct _PARTITION_INFORMATION
{
LARGE_INTEGER StartingOffset;
LARGE_INTEGER PartitionLength;
ULONG HiddenSectors;
ULONG PartitionNumber;
UCHAR PartitionType;
BOOLEAN BootIndicator;
BOOLEAN RecognizedPartition;
BOOLEAN RewritePartition;
} PARTITION_INFORMATION, *PPARTITION_INFORMATION;
#endif
typedef struct _DRIVER_LAYOUT_INFORMATION
{
ULONG PartitionCount;
ULONG Signature;
PARTITION_INFORMATION PartitionEntry[1];
} DRIVER_LAYOUT_INFORMATION, *PDRIVER_LAYOUT_INFORMATION;
typedef IO_ALLOCATION_ACTION STDCALL
(*PDRIVER_CONTROL)(PDEVICE_OBJECT DeviceObject,
PIRP Irp,
PVOID MapRegisterBase,
PVOID Context);
#if (_WIN32_WINNT >= 0x0400)
typedef VOID STDCALL
(*PFSDNOTIFICATIONPROC)(IN PDEVICE_OBJECT PtrTargetFileSystemDeviceObject,
IN BOOLEAN DriverActive);
#endif // (_WIN32_WINNT >= 0x0400)
#endif /* __INCLUDE_DDK_IOTYPES_H */
+99
View File
@@ -0,0 +1,99 @@
#ifndef __INCLUDE_DDK_KDFUNCS_H
#define __INCLUDE_DDK_KDFUNCS_H
/* $Id: kdfuncs.h,v 1.8 2002/09/08 10:47:44 chorns Exp $ */
/* --- NTOSKRNL.EXE --- */
#if defined(__NTOSKRNL__)
extern BOOLEAN KdDebuggerEnabled __declspec(dllexport);
extern BOOLEAN KdDebuggerNotPresent __declspec(dllexport);
#else
extern BOOLEAN KdDebuggerEnabled __declspec(dllimport);
extern BOOLEAN KdDebuggerNotPresent __declspec(dllimport);
#endif
BYTE
STDCALL
KdPollBreakIn (
VOID
);
BOOLEAN
STDCALL
KdPortInitialize (
PKD_PORT_INFORMATION PortInformation,
DWORD Unknown1,
DWORD Unknown2
);
BOOLEAN
STDCALL
KdPortInitializeEx (
PKD_PORT_INFORMATION PortInformation,
DWORD Unknown1,
DWORD Unknown2
);
BOOLEAN
STDCALL
KdPortGetByte (
PUCHAR ByteRecieved
);
BOOLEAN
STDCALL
KdPortGetByteEx (
PKD_PORT_INFORMATION PortInformation,
PUCHAR ByteRecieved
);
BOOLEAN
STDCALL
KdPortPollByte (
PUCHAR ByteRecieved
);
BOOLEAN
STDCALL
KdPortPollByteEx (
PKD_PORT_INFORMATION PortInformation,
PUCHAR ByteRecieved
);
VOID
STDCALL
KdPortPutByte (
UCHAR ByteToSend
);
VOID
STDCALL
KdPortPutByteEx (
PKD_PORT_INFORMATION PortInformation,
UCHAR ByteToSend
);
VOID
STDCALL
KdPortRestore (
VOID
);
VOID
STDCALL
KdPortSave (
VOID
);
BOOLEAN
STDCALL
KdPortDisableInterrupts(
VOID
);
BOOLEAN
STDCALL
KdPortEnableInterrupts(
VOID
);
#endif /* __INCLUDE_DDK_KDFUNCS_H */
+66
View File
@@ -0,0 +1,66 @@
#ifndef __INCLUDE_DDK_KEDEF_H
#define __INCLUDE_DDK_KEDEF_H
typedef enum _KBUGCHECK_BUFFER_DUMP_STATE
{
BufferEmpty,
BufferInserted,
BufferStarted,
BufferFinished,
BufferIncomplete
}KBUGCHECK_BUFFER_DUMP_STATE;
typedef enum _KINTERRUPT_MODE
{
LevelSensitive,
Latched,
} KINTERRUPT_MODE;
/*
* PURPOSE: DPC importance
*/
typedef enum _KDPC_IMPORTANCE
{
LowImportance,
MediumImportance,
HighImportance
} KDPC_IMPORTANCE;
typedef enum _EVENT_TYPE
{
NotificationEvent,
SynchronizationEvent,
} EVENT_TYPE;
typedef enum _KWAIT_REASON
{
Executive,
FreePage,
PageIn,
PoolAllocation,
DelayExecution,
Suspended,
UserRequest,
WrExecutive,
WrFreePage,
WrPageIn,
WrDelayExecution,
WrSuspended,
WrUserRequest,
WrEventPair,
WrQueue,
WrLpcReceive,
WrLpcReply,
WrVirtualMemory,
WrPageOut,
WrRendezvous,
Spare2,
Spare3,
Spare4,
Spare5,
Spare6,
WrKernel,
MaximumWaitReason,
} KWAIT_REASON;
#endif
+493
View File
@@ -0,0 +1,493 @@
#ifndef __INCLUDE_DDK_KEFUNCS_H
#define __INCLUDE_DDK_KEFUNCS_H
/* KERNEL FUNCTIONS ********************************************************/
#define KeFlushIoBuffers(Mdl, ReadOperation, DmaOperation)
VOID STDCALL KeAttachProcess (struct _EPROCESS* Process);
VOID KeDrainApcQueue(VOID);
struct _KPROCESS* KeGetCurrentProcess(VOID);
/*
* FUNCTION: Acquires a spinlock so the caller can synchronize access to
* data
* ARGUMENTS:
* SpinLock = Initialized spinlock
* OldIrql (OUT) = Set the previous irql on return
*/
VOID STDCALL KeAcquireSpinLock (PKSPIN_LOCK SpinLock,
PKIRQL OldIrql);
VOID STDCALL KeAcquireSpinLockAtDpcLevel (PKSPIN_LOCK SpinLock);
/*
* FUNCTION: Brings the system down in a controlled manner when an
* inconsistency that might otherwise cause corruption has been detected
* ARGUMENTS:
* BugCheckCode = Specifies the reason for the bug check
* RETURNS: Doesn't
*/
VOID STDCALL KeBugCheck (ULONG BugCheckCode);
/*
* FUNCTION: Brings the system down in a controlled manner when an
* inconsistency that might otherwise cause corruption has been detected
* ARGUMENTS:
* BugCheckCode = Specifies the reason for the bug check
* BugCheckParameter[1-4] = Additional information about bug
* RETURNS: Doesn't
*/
VOID STDCALL KeBugCheckEx (ULONG BugCheckCode,
ULONG BugCheckParameter1,
ULONG BugCheckParameter2,
ULONG BugCheckParameter3,
ULONG BugCheckParameter4);
BOOLEAN STDCALL KeCancelTimer (PKTIMER Timer);
VOID STDCALL KeClearEvent (PKEVENT Event);
NTSTATUS STDCALL KeConnectInterrupt(PKINTERRUPT InterruptObject);
NTSTATUS STDCALL KeDelayExecutionThread (KPROCESSOR_MODE WaitMode,
BOOLEAN Alertable,
PLARGE_INTEGER Internal);
BOOLEAN STDCALL KeDeregisterBugCheckCallback (
PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
VOID STDCALL KeDetachProcess (VOID);
VOID STDCALL KeDisconnectInterrupt(PKINTERRUPT InterruptObject);
VOID STDCALL KeEnterCriticalRegion (VOID);
/*
* FUNCTION: Enters the kernel debugger
* ARGUMENTS:
* None
*/
VOID STDCALL KeEnterKernelDebugger (VOID);
VOID STDCALL KeFlushWriteBuffer (VOID);
KIRQL STDCALL KeGetCurrentIrql (VOID);
ULONG KeGetCurrentProcessorNumber(VOID);
struct _KTHREAD* STDCALL KeGetCurrentThread (VOID);
ULONG KeGetDcacheFillSize(VOID);
ULONG STDCALL KeGetPreviousMode (VOID);
VOID STDCALL KeInitializeApc (PKAPC Apc,
struct _KTHREAD* Thread,
UCHAR StateIndex,
PKKERNEL_ROUTINE KernelRoutine,
PKRUNDOWN_ROUTINE RundownRoutine,
PKNORMAL_ROUTINE NormalRoutine,
UCHAR Mode,
PVOID Context);
/*
* VOID
* KeInitializeCallbackRecord (
* PKBUGCHECK_CALLBACK_RECORD CallbackRecord
* );
*/
#define KeInitializeCallbackRecord(CallbackRecord) \
(CallbackRecord)->State = BufferEmpty
VOID STDCALL KeInitializeDeviceQueue (PKDEVICE_QUEUE DeviceQueue);
VOID STDCALL KeInitializeDpc (PKDPC Dpc,
PKDEFERRED_ROUTINE DeferredRoutine,
PVOID DeferredContext);
VOID STDCALL KeInitializeEvent (PKEVENT Event,
EVENT_TYPE Type,
BOOLEAN State);
NTSTATUS STDCALL KeInitializeInterrupt(PKINTERRUPT InterruptObject,
PKSERVICE_ROUTINE ServiceRoutine,
PVOID ServiceContext,
PKSPIN_LOCK SpinLock,
ULONG Vector,
KIRQL Irql,
KIRQL SynchronizeIrql,
KINTERRUPT_MODE InterruptMode,
BOOLEAN ShareVector,
KAFFINITY ProcessorEnableMask,
BOOLEAN FloatingSave);
VOID STDCALL KeInitializeMutant(IN PKMUTANT Mutant,
IN BOOLEAN InitialOwner);
VOID STDCALL KeInitializeMutex (PKMUTEX Mutex,
ULONG Level);
VOID STDCALL
KeInitializeQueue(IN PKQUEUE Queue,
IN ULONG Count);
VOID STDCALL KeInitializeSemaphore (PKSEMAPHORE Semaphore,
LONG Count,
LONG Limit);
/*
* FUNCTION: Initializes a spinlock
* ARGUMENTS:
* SpinLock = Spinlock to initialize
*/
VOID STDCALL KeInitializeSpinLock (PKSPIN_LOCK SpinLock);
VOID STDCALL KeInitializeTimer (PKTIMER Timer);
VOID STDCALL KeInitializeTimerEx (PKTIMER Timer,
TIMER_TYPE Type);
BOOLEAN STDCALL KeInsertByKeyDeviceQueue (PKDEVICE_QUEUE DeviceQueue,
PKDEVICE_QUEUE_ENTRY QueueEntry,
ULONG SortKey);
BOOLEAN STDCALL KeInsertDeviceQueue (PKDEVICE_QUEUE DeviceQueue,
PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
LONG STDCALL
KeInsertHeadQueue(IN PKQUEUE Queue,
IN PLIST_ENTRY Entry);
LONG STDCALL
KeInsertQueue(IN PKQUEUE Queue,
IN PLIST_ENTRY Entry);
VOID STDCALL KeInsertQueueApc (PKAPC Apc,
PVOID SystemArgument1,
PVOID SystemArgument2,
UCHAR Mode);
BOOLEAN STDCALL KeInsertQueueDpc (PKDPC Dpc,
PVOID SystemArgument1,
PVOID SystemArgument2);
VOID STDCALL KeLeaveCriticalRegion (VOID);
VOID STDCALL KeLowerIrql (KIRQL NewIrql);
NTSTATUS STDCALL KePulseEvent (PKEVENT Event,
KPRIORITY Increment,
BOOLEAN Wait);
LARGE_INTEGER
STDCALL
KeQueryPerformanceCounter (
PLARGE_INTEGER PerformanceFrequency
);
VOID
STDCALL
KeQuerySystemTime (
PLARGE_INTEGER CurrentTime
);
VOID
STDCALL
KeQueryTickCount (
PLARGE_INTEGER TickCount
);
ULONG
STDCALL
KeQueryTimeIncrement (
VOID
);
VOID
STDCALL
KeRaiseIrql (
KIRQL NewIrql,
PKIRQL OldIrql
);
KIRQL
STDCALL
KeRaiseIrqlToDpcLevel (
VOID
);
KIRQL
STDCALL
KeRaiseIrqlToSynchLevel (
VOID
);
/*
* FUNCTION: Raises a user mode exception
* ARGUMENTS:
* ExceptionCode = Status code of the exception
*/
VOID
STDCALL
KeRaiseUserException (
IN NTSTATUS ExceptionCode
);
LONG
STDCALL
KeReadStateEvent (
PKEVENT Event
);
LONG STDCALL
KeReadStateMutant(IN PKMUTANT Mutant);
LONG STDCALL
KeReadStateMutex(IN PKMUTEX Mutex);
LONG STDCALL
KeReadStateQueue(IN PKQUEUE Queue);
LONG STDCALL
KeReadStateSemaphore(IN PKSEMAPHORE Semaphore);
BOOLEAN STDCALL
KeReadStateTimer(IN PKTIMER Timer);
BOOLEAN
STDCALL
KeRegisterBugCheckCallback (
PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
PVOID Buffer,
ULONG Length,
PUCHAR Component
);
LONG
STDCALL
KeReleaseMutant(
IN PKMUTANT Mutant,
IN KPRIORITY Increment,
IN BOOLEAN Abandon,
IN BOOLEAN Wait
);
LONG
STDCALL
KeReleaseMutex (
PKMUTEX Mutex,
BOOLEAN Wait
);
LONG
STDCALL
KeReleaseSemaphore (
PKSEMAPHORE Semaphore,
KPRIORITY Increment,
LONG Adjustment,
BOOLEAN Wait
);
VOID
STDCALL
KeReleaseSpinLock (
PKSPIN_LOCK Spinlock,
KIRQL NewIrql
);
VOID
STDCALL
KeReleaseSpinLockFromDpcLevel (
PKSPIN_LOCK Spinlock
);
PKDEVICE_QUEUE_ENTRY
STDCALL
KeRemoveByKeyDeviceQueue (
PKDEVICE_QUEUE DeviceQueue,
ULONG SortKey
);
PKDEVICE_QUEUE_ENTRY
STDCALL
KeRemoveDeviceQueue (
PKDEVICE_QUEUE DeviceQueue
);
BOOLEAN STDCALL
KeRemoveEntryDeviceQueue(PKDEVICE_QUEUE DeviceQueue,
PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
PLIST_ENTRY STDCALL
KeRemoveQueue(IN PKQUEUE Queue,
IN KPROCESSOR_MODE WaitMode,
IN PLARGE_INTEGER Timeout OPTIONAL);
BOOLEAN STDCALL
KeRemoveQueueDpc(IN PKDPC Dpc);
LONG STDCALL
KeResetEvent(IN PKEVENT Event);
LONG STDCALL
KeSetBasePriorityThread(struct _KTHREAD* Thread,
LONG Increment);
LONG
STDCALL
KeSetEvent (
PKEVENT Event,
KPRIORITY Increment,
BOOLEAN Wait
);
KPRIORITY STDCALL KeSetPriorityThread (struct _KTHREAD* Thread,
KPRIORITY Priority);
BOOLEAN STDCALL KeSetTimer (PKTIMER Timer,
LARGE_INTEGER DueTime,
PKDPC Dpc);
BOOLEAN STDCALL KeSetTimerEx (PKTIMER Timer,
LARGE_INTEGER DueTime,
LONG Period,
PKDPC Dpc);
VOID STDCALL KeStallExecutionProcessor (ULONG MicroSeconds);
BOOLEAN STDCALL KeSynchronizeExecution (PKINTERRUPT Interrupt,
PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
PVOID SynchronizeContext);
NTSTATUS STDCALL KeWaitForMultipleObjects (ULONG Count,
PVOID Object[],
WAIT_TYPE WaitType,
KWAIT_REASON WaitReason,
KPROCESSOR_MODE WaitMode,
BOOLEAN Alertable,
PLARGE_INTEGER Timeout,
PKWAIT_BLOCK WaitBlockArray);
NTSTATUS
STDCALL
KeWaitForMutexObject (
PKMUTEX Mutex,
KWAIT_REASON WaitReason,
KPROCESSOR_MODE WaitMode,
BOOLEAN Alertable,
PLARGE_INTEGER Timeout
);
NTSTATUS
STDCALL
KeWaitForSingleObject (
PVOID Object,
KWAIT_REASON WaitReason,
KPROCESSOR_MODE WaitMode,
BOOLEAN Alertable,
PLARGE_INTEGER Timeout
);
// io permission map has a 8k size
// Each bit in the IOPM corresponds to an io port byte address. The bitmap
// is initialized to allow IO at any port. [ all bits set ].
typedef struct _IOPM
{
UCHAR Bitmap[8192];
} IOPM, *PIOPM;
/*
* FUNCTION: Provides the kernel with a new access map for a driver
* ARGUMENTS:
* NewMap: = If FALSE the kernel's map is set to all disabled. If TRUE
* the kernel disables access to a particular port.
* IoPortMap = Caller supplies storage for the io permission map.
* REMARKS
* Each bit in the IOPM corresponds to an io port byte address. The bitmap
* is initialized to allow IO at any port. [ all bits set ]. The IOPL determines
* the minium privilege level required to perform IO prior to checking the permission map.
*/
VOID Ke386SetIoAccessMap(ULONG NewMap, PIOPM *IoPermissionMap);
/*
* FUNCTION: Queries the io permission map.
* ARGUMENTS:
* NewMap: = If FALSE the kernel's map is set to all disabled. If TRUE
* the kernel disables access to a particular port.
* IoPortMap = Caller supplies storage for the io permission map.
* REMARKS
* Each bit in the IOPM corresponds to an io port byte address. The bitmap
* is initialized to allow IO at any port. [ all bits set ]. The IOPL determines
* the minium privilege level required to perform IO prior to checking the permission map.
*/
VOID Ke386QueryIoAccessMap(BOOLEAN NewMap, PIOPM *IoPermissionMap);
/*
* FUNCTION: Set the process IOPL
* ARGUMENTS:
* Eprocess = Pointer to a executive process object
* EnableIo = Specify TRUE to enable IO and FALSE to disable
*/
NTSTATUS Ke386IoSetAccessProcess(struct _EPROCESS* Eprocess, BOOLEAN EnableIo);
/*
* FUNCTION: Releases a set of Global Descriptor Table Selectors
* ARGUMENTS:
* SelArray =
* NumOfSelectors =
*/
NTSTATUS KeI386ReleaseGdtSelectors(OUT PULONG SelArray,
IN ULONG NumOfSelectors);
/*
* FUNCTION: Allocates a set of Global Descriptor Table Selectors
* ARGUMENTS:
* SelArray =
* NumOfSelectors =
*/
NTSTATUS KeI386AllocateGdtSelectors(OUT PULONG SelArray,
IN ULONG NumOfSelectors);
KIRQL
FASTCALL
KfAcquireSpinLock (
IN PKSPIN_LOCK SpinLock
);
VOID
FASTCALL
KfLowerIrql (
IN KIRQL NewIrql
);
KIRQL
FASTCALL
KfRaiseIrql (
IN KIRQL NewIrql
);
VOID
FASTCALL
KfReleaseSpinLock (
IN PKSPIN_LOCK SpinLock,
IN KIRQL NewIrql
);
VOID STDCALL KiDeliverApc(ULONG Unknown1,
ULONG Unknown2,
ULONG Unknown3);
VOID STDCALL KiDispatchInterrupt(VOID);
#endif /* __INCLUDE_DDK_KEFUNCS_H */
+288
View File
@@ -0,0 +1,288 @@
/* KERNEL TYPES **************************************************************/
#ifndef __INCLUDE_DDK_KETYPES_H
#define __INCLUDE_DDK_KETYPES_H
#define MB_FLAGS_MEM_INFO (0x1)
#define MB_FLAGS_BOOT_DEVICE (0x2)
#define MB_FLAGS_COMMAND_LINE (0x4)
#define MB_FLAGS_MODULE_INFO (0x8)
#define MB_FLAGS_AOUT_SYMS (0x10)
#define MB_FLAGS_ELF_SYMS (0x20)
#define MB_FLAGS_MMAP_INFO (0x40)
#define MB_FLAGS_DRIVES_INFO (0x80)
#define MB_FLAGS_CONFIG_TABLE (0x100)
#define MB_FLAGS_BOOT_LOADER_NAME (0x200)
#define MB_FLAGS_APM_TABLE (0x400)
#define MB_FLAGS_GRAPHICS_TABLE (0x800)
typedef struct _LOADER_MODULE
{
ULONG ModStart;
ULONG ModEnd;
ULONG String;
ULONG Reserved;
} LOADER_MODULE, *PLOADER_MODULE;
typedef struct _ADDRESS_RANGE
{
ULONG BaseAddrLow;
ULONG BaseAddrHigh;
ULONG LengthLow;
ULONG LengthHigh;
ULONG Type;
} ADDRESS_RANGE, *PADDRESS_RANGE;
typedef struct _LOADER_PARAMETER_BLOCK
{
ULONG Flags;
ULONG MemLower;
ULONG MemHigher;
ULONG BootDevice;
ULONG CommandLine;
ULONG ModsCount;
ULONG ModsAddr;
UCHAR Syms[12];
ULONG MmapLength;
ULONG MmapAddr;
ULONG DrivesCount;
ULONG DrivesAddr;
ULONG ConfigTable;
ULONG BootLoaderName;
} LOADER_PARAMETER_BLOCK, *PLOADER_PARAMETER_BLOCK;
#ifdef __NTOSKRNL__
extern CHAR EXPORTED KeNumberProcessors;
extern LOADER_PARAMETER_BLOCK EXPORTED KeLoaderBlock;
extern ULONG EXPORTED KeDcacheFlushCount;
extern ULONG EXPORTED KeIcacheFlushCount;
#else
extern CHAR IMPORTED KeNumberProcessors;
extern LOADER_PARAMETER_BLOCK IMPORTED KeLoaderBlock;
extern ULONG EXPORTED KeDcacheFlushCount;
extern ULONG EXPORTED KeIcacheFlushCount;
#endif
struct _KMUTANT;
typedef LONG KPRIORITY;
typedef VOID STDCALL
(*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer,
ULONG Length);
typedef BOOLEAN STDCALL
(*PKSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
struct _KAPC;
typedef VOID STDCALL
(*PKNORMAL_ROUTINE)(PVOID NormalContext,
PVOID SystemArgument1,
PVOID SystemArgument2);
typedef VOID STDCALL
(*PKKERNEL_ROUTINE)(struct _KAPC* Apc,
PKNORMAL_ROUTINE* NormalRoutine,
PVOID* NormalContext,
PVOID* SystemArgument1,
PVOID* SystemArgument2);
typedef VOID STDCALL
(*PKRUNDOWN_ROUTINE)(struct _KAPC* Apc);
struct _DISPATCHER_HEADER;
typedef struct _KWAIT_BLOCK
/*
* PURPOSE: Object describing the wait a thread is currently performing
*/
{
LIST_ENTRY WaitListEntry;
struct _KTHREAD* Thread;
struct _DISPATCHER_HEADER *Object;
struct _KWAIT_BLOCK* NextWaitBlock;
USHORT WaitKey;
USHORT WaitType;
} KWAIT_BLOCK, *PKWAIT_BLOCK;
typedef struct _DISPATCHER_HEADER
{
UCHAR Type;
UCHAR Absolute;
UCHAR Size;
UCHAR Inserted;
LONG SignalState;
LIST_ENTRY WaitListHead;
} __attribute__((packed)) DISPATCHER_HEADER, *PDISPATCHER_HEADER;
typedef struct _KQUEUE
{
DISPATCHER_HEADER Header;
LIST_ENTRY EntryListHead;
ULONG CurrentCount;
ULONG MaximumCount;
LIST_ENTRY ThreadListEntry;
} KQUEUE, *PKQUEUE;
struct _KDPC;
typedef struct _KTIMER
{
DISPATCHER_HEADER Header;
ULARGE_INTEGER DueTime;
LIST_ENTRY TimerListEntry;
struct _KDPC* Dpc;
LONG Period;
} KTIMER, *PKTIMER;
struct _KSPIN_LOCK;
typedef struct _KSPIN_LOCK
{
ULONG Lock;
} KSPIN_LOCK, *PKSPIN_LOCK;
typedef struct _KDEVICE_QUEUE
{
LIST_ENTRY ListHead;
BOOLEAN Busy;
KSPIN_LOCK Lock;
} KDEVICE_QUEUE, *PKDEVICE_QUEUE;
typedef struct _KAPC
{
CSHORT Type;
CSHORT Size;
ULONG Spare0;
struct _KTHREAD* Thread;
LIST_ENTRY ApcListEntry;
PKKERNEL_ROUTINE KernelRoutine;
PKRUNDOWN_ROUTINE RundownRoutine;
PKNORMAL_ROUTINE NormalRoutine;
PVOID NormalContext;
PVOID SystemArgument1;
PVOID SystemArgument2;
CCHAR ApcStateIndex;
KPROCESSOR_MODE ApcMode;
USHORT Inserted;
} __attribute__((packed)) KAPC, *PKAPC;
typedef struct _KBUGCHECK_CALLBACK_RECORD
{
LIST_ENTRY Entry;
PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
PVOID Buffer;
ULONG Length;
PUCHAR Component;
ULONG Checksum;
UCHAR State;
} KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
typedef struct _KMUTEX
{
DISPATCHER_HEADER Header;
LIST_ENTRY MutantListEntry;
struct _KTHREAD* OwnerThread;
BOOLEAN Abandoned;
UCHAR ApcDisable;
} KMUTEX, *PKMUTEX, KMUTANT, *PKMUTANT;
typedef struct _KSEMAPHORE
{
DISPATCHER_HEADER Header;
LONG Limit;
} __attribute__((packed)) KSEMAPHORE, *PKSEMAPHORE;
typedef struct _KEVENT
{
DISPATCHER_HEADER Header;
} KEVENT, *PKEVENT;
typedef struct _KEVENT_PAIR
{
CSHORT Type;
CSHORT Size;
KEVENT LowEvent;
KEVENT HighEvent;
} KEVENT_PAIR, *PKEVENT_PAIR;
struct _KDPC;
/*
* PURPOSE: Defines a delayed procedure call routine
* NOTE:
* Dpc = The associated DPC object
* DeferredContext = Driver defined context for the DPC
* SystemArgument[1-2] = Undocumented.
*
*/
typedef VOID STDCALL
(*PKDEFERRED_ROUTINE)(struct _KDPC* Dpc,
PVOID DeferredContext,
PVOID SystemArgument1,
PVOID SystemArgument2);
/*
* PURPOSE: Defines a delayed procedure call object
*/
typedef struct _KDPC
{
SHORT Type;
UCHAR Number;
UCHAR Importance;
LIST_ENTRY DpcListEntry;
PKDEFERRED_ROUTINE DeferredRoutine;
PVOID DeferredContext;
PVOID SystemArgument1;
PVOID SystemArgument2;
PULONG Lock;
} __attribute__((packed)) KDPC, *PKDPC;
typedef struct _KDEVICE_QUEUE_ENTRY
{
LIST_ENTRY Entry;
ULONG Key;
BOOLEAN Inserted;
} KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
typedef struct _WAIT_CONTEXT_BLOCK
{
} WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
struct _KINTERRUPT;
typedef BOOLEAN STDCALL
(*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt,
PVOID ServiceContext);
typedef struct _KINTERRUPT
{
ULONG Vector;
KAFFINITY ProcessorEnableMask;
PKSPIN_LOCK IrqLock;
BOOLEAN Shareable;
BOOLEAN FloatingSave;
PKSERVICE_ROUTINE ServiceRoutine;
PVOID ServiceContext;
LIST_ENTRY Entry;
KIRQL SynchLevel;
} KINTERRUPT, *PKINTERRUPT;
typedef struct _KSYSTEM_TIME
{
ULONG LowPart;
LONG High1Part;
LONG High2Part;
} KSYSTEM_TIME, *PKSYSTEM_TIME;
typedef struct _EPROCESS EPROCESS, *PEPROCESS;
#endif /* __INCLUDE_DDK_KETYPES_H */
+17
View File
@@ -0,0 +1,17 @@
#ifndef __INCLUDE_DDK_LDRFUNCS_H
#define __INCLUDE_DDK_LDRFUNCS_H
/* $Id: ldrfuncs.h,v 1.5 2002/09/08 10:47:44 chorns Exp $ */
NTSTATUS STDCALL
LdrAccessResource(IN PVOID BaseAddress,
IN PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry,
OUT PVOID *Resource OPTIONAL,
OUT PULONG Size OPTIONAL);
NTSTATUS STDCALL
LdrFindResource_U(IN PVOID BaseAddress,
IN PLDR_RESOURCE_INFO ResourceInfo,
IN ULONG Level,
OUT PIMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry);
#endif /* __INCLUDE_DDK_LDRFUNCS_H */
+17
View File
@@ -0,0 +1,17 @@
#ifndef __INCLUDE_DDK_LDRTYPES_H
#define __INCLUDE_DDK_LDRTYPES_H
/* $Id: ldrtypes.h,v 1.3 2002/09/08 10:47:44 chorns Exp $ */
typedef struct _LDR_RESOURCE_INFO
{
ULONG Type;
ULONG Name;
ULONG Language;
} LDR_RESOURCE_INFO, *PLDR_RESOURCE_INFO;
#define RESOURCE_TYPE_LEVEL 0
#define RESOURCE_NAME_LEVEL 1
#define RESOURCE_LANGUAGE_LEVEL 2
#define RESOURCE_DATA_LEVEL 3
#endif /* __INCLUDE_DDK_LDRTYPES_H */
+25
View File
@@ -0,0 +1,25 @@
/*
* MINIPORT.H - miniport driver interface header
*/
#define EMULATOR_READ_ACCESS 0x00000001
#define EMULATOR_WRITE_ACCESS 0x00000002
typedef enum _EMULATOR_PORT_ACCESS_TYPE
{
Uchar,
Ushort,
Ulong
} EMULATOR_PORT_ACCESS_TYPE, *PEMULATOR_PORT_ACCESS_TYPE;
typedef struct _EMULATOR_ACCESS_ENTRY
{
ULONG BasePort;
ULONG NumConsecutivePorts;
EMULATOR_PORT_ACCESS_TYPE AccessType;
UCHAR AccessMode;
UCHAR StringSupport;
PVOID Routine;
} EMULATOR_ACCESS_ENTRY, *PEMULATOR_ACCESS_ENTRY;
+553
View File
@@ -0,0 +1,553 @@
#ifndef _INCLUDE_DDK_MMFUNCS_H
#define _INCLUDE_DDK_MMFUNCS_H
/* $Id: mmfuncs.h,v 1.13 2002/09/08 10:47:44 chorns Exp $ */
/* MEMORY MANAGMENT ******************************************************/
#ifdef __NTOSKRNL__
extern PVOID EXPORTED MmUserProbeAddress;
extern PVOID EXPORTED MmHighestUserAddress;
#else
extern PVOID IMPORTED MmUserProbeAddress;
extern PVOID IMPORTED MmHighestUserAddress;
#endif
#ifdef __NTOSKRNL__
extern POBJECT_TYPE EXPORTED MmSectionObjectType;
#else
extern POBJECT_TYPE IMPORTED MmSectionObjectType;
#endif
/*
* FUNCTION: Returns the number of pages spanned by an address range
* ARGUMENTS:
* Va = start of range
* Size = Size of range
* RETURNS: The number of pages
*/
#if 0
extern inline unsigned int ADDRESS_AND_SIZE_TO_SPAN_PAGES(PVOID Va,
ULONG Size)
{
ULONG HighestAddr;
ULONG LowestAddr;
HighestAddr = PAGE_ROUND_UP(Size + ((ULONG)Va));
LowestAddr = PAGE_ROUND_DOWN((ULONG)Va);
return((HighestAddr - LowestAddr) / PAGESIZE);
}
#endif
#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size) \
(ULONG)((PAGE_ROUND_UP((Size) + ((ULONG)(Va))) - \
PAGE_ROUND_DOWN((ULONG)(Va))) / PAGESIZE)
/*
* FUNCTION: Returns FALSE is the pointer is NULL, TRUE otherwise
*/
#define ARGUMENT_PRESENT(arg) ((arg)!=NULL)
/*
* FUNCTION: Returns the byte offset of the address within its page
*/
#define BYTE_OFFSET(va) (((ULONG)va)%PAGESIZE)
/*
* FUNCTION: Takes a count in bytes and returns the number of pages
* required to hold it
*/
#define BYTES_TO_PAGES(size) (?)
DWORD
STDCALL
MmAdjustWorkingSetSize (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2
);
PVOID
STDCALL
MmAllocateContiguousMemory (
IN ULONG NumberOfBytes,
IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
PVOID STDCALL
MmAllocateContiguousAlignedMemory(IN ULONG NumberOfBytes,
IN PHYSICAL_ADDRESS HighestAcceptableAddress,
IN ULONG Alignment);
PVOID
STDCALL
MmAllocateNonCachedMemory (
IN ULONG NumberOfBytes
);
/*
* FUNCTION: Fills in the corresponding physical page array for a given MDL
* for a buffer in nonpaged system space
* ARGUMENTS:
* MemoryDescriptorList = MDL to fill
*/
VOID
STDCALL
MmBuildMdlForNonPagedPool (
PMDL MemoryDescriptorList
);
BOOLEAN
STDCALL
MmCanFileBeTruncated (
IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
IN PLARGE_INTEGER NewFileSize
);
/*
* FUNCTION: Allocates and initializes an MDL
* ARGUMENTS:
* MemoryDescriptorList = Optional caller allocated MDL to initalize
* Base = Base virtual address for buffer
* Length = Length in bytes of the buffer
* RETURNS: A pointer to the initalized MDL
*/
PMDL
STDCALL
MmCreateMdl (
PMDL MemoryDescriptorList,
PVOID Base,
ULONG Length
);
#if 0
NTSTATUS
STDCALL
MmCreateSection (
OUT PSECTION_OBJECT * SectionObject,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN PLARGE_INTEGER MaximumSize,
IN ULONG SectionPageProtection,
IN ULONG AllocationAttributes,
IN HANDLE FileHandle OPTIONAL,
IN PFILE_OBJECT File OPTIONAL
);
#endif
DWORD
STDCALL
MmDbgTranslatePhysicalAddress (
DWORD Unknown0,
DWORD Unknown1
);
BOOLEAN
STDCALL
MmDisableModifiedWriteOfSection (
DWORD Unknown0
);
BOOLEAN
STDCALL
MmFlushImageSection (
IN PSECTION_OBJECT_POINTERS SectionObjectPointer,
IN MMFLUSH_TYPE FlushType
);
BOOLEAN
STDCALL
MmForceSectionClosed (
DWORD Unknown0,
DWORD Unknown1
);
VOID
STDCALL
MmFreeContiguousMemory (
IN OUT PVOID BaseAddress
);
VOID
STDCALL
MmFreeNonCachedMemory (
IN PVOID BaseAddress,
IN ULONG NumberOfBytes
);
/*
* FUNCTION: Returns the length in bytes of a buffer described by an MDL
* ARGUMENTS:
* Mdl = the mdl
* RETURNS: Size of the buffer
*/
#define MmGetMdlByteCount(Mdl) ((Mdl)->ByteCount)
/*
* FUNCTION: Returns the byte offset within a page of the buffer described
* by an MDL
* ARGUMENTS:
* Mdl = the mdl
* RETURNS: The offset in bytes
*/
#define MmGetMdlByteOffset(Mdl) \
((Mdl)->ByteOffset)
/*
* FUNCTION: Returns the initial virtual address for a buffer described
* by an MDL
* ARGUMENTS:
* Mdl = the mdl
* RETURNS: The initial virtual address
*/
#define MmGetMdlVirtualAddress(Mdl) \
((PVOID) ((PCHAR) (Mdl)->StartVa + (Mdl)->ByteOffset))
/*
* FUNCTION: Returns the physical address corresponding to a given valid
* virtual address
* ARGUMENTS:
* BaseAddress = the virtual address
* RETURNS: The physical address
*/
PHYSICAL_ADDRESS
STDCALL
MmGetPhysicalAddress (
IN PVOID BaseAddress
);
#define MmGetProcedureAddress(Address) (Address)
/*
* PVOID
* MmGetSystemAddressForMdl (
* PMDL Mdl
* );
*
* FUNCTION:
* Maps the physical pages described by an MDL into system space
*
* ARGUMENTS:
* Mdl = mdl
*
* RETURNS:
* The base system address for the mapped buffer
*/
#define MmGetSystemAddressForMdl(Mdl) \
(((Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
((Mdl)->MappedSystemVa):(MmMapLockedPages((Mdl),KernelMode)))
NTSTATUS
STDCALL
MmGrowKernelStack (
DWORD Unknown0
);
/*
* VOID
* MmInitializeMdl (
* PMDL MemoryDescriptorList,
* PVOID BaseVa,
* ULONG Length
* );
*
* FUNCTION:
* Initalizes an MDL
*
* ARGUMENTS:
* MemoryDescriptorList = MDL to be initalized
* BaseVa = Base virtual address of the buffer
* Length = Length in bytes of the buffer
*/
#define MmInitializeMdl(MemoryDescriptorList,BaseVa,Length) \
{ \
(MemoryDescriptorList)->Next = (PMDL)NULL; \
(MemoryDescriptorList)->Size = (CSHORT)(sizeof(MDL) + \
(ADDRESS_AND_SIZE_TO_SPAN_PAGES((BaseVa),(Length)) * sizeof(ULONG))); \
(MemoryDescriptorList)->MdlFlags = 0; \
(MemoryDescriptorList)->StartVa = (PVOID)PAGE_ROUND_DOWN((BaseVa)); \
(MemoryDescriptorList)->ByteOffset = (ULONG)((BaseVa) - PAGE_ROUND_DOWN((BaseVa))); \
(MemoryDescriptorList)->ByteCount = (Length); \
(MemoryDescriptorList)->Process = PsGetCurrentProcess(); \
}
/*
* FUNCTION: Checks whether an address is valid for read/write
* ARGUMENTS:
* VirtualAddress = address to be check
* RETURNS: TRUE if an access would be valid
*/
BOOLEAN
STDCALL
MmIsAddressValid (
IN PVOID VirtualAddress
);
BOOLEAN
STDCALL
MmIsNonPagedSystemAddressValid (
IN PVOID VirtualAddress
);
BOOLEAN
STDCALL
MmIsRecursiveIoFault (
VOID
);
/*
* FUNCTION: Checks if the current platform is a workstation or a server
* RETURNS: If the system is a server returns true
* NOTE: Drivers can use this as an estimate of the likely resources
* available
*/
BOOLEAN
STDCALL
MmIsThisAnNtAsSystem (
VOID
);
/*
* FUNCTION: Locks a section of the driver's code into memory
* ARGUMENTS:
* AddressWithinSection = Any address in the region
* RETURNS: A handle to the region
*/
#define MmLockPagableCodeSection(Address) \
MmLockPagableDataSection(Address)
/*
* FUNCTION: Locks a section of the driver's data into memory
* ARGUMENTS:
* AddressWithinSection = Any address in the region
* RETURNS: A handle to the region
*/
PVOID
STDCALL
MmLockPagableDataSection (
PVOID AddressWithinSection
);
PVOID
STDCALL
MmLockPagableImageSection (
PVOID AddressWithinSection
);
/*
* FUNCTION: Locks a section of memory
* ARGUMENTS:
* ImageSectionHandle = handle returned from MmLockPagableCodeSection
* or MmLockPagableDataSection
*/
VOID
STDCALL
MmLockPagableSectionByHandle (
PVOID ImageSectionHandle
);
PVOID
STDCALL
MmMapIoSpace (
PHYSICAL_ADDRESS PhysicalAddress,
ULONG NumberOfBytes,
BOOLEAN CacheEnable
);
/*
* FUNCTION: Maps the pages described by a given MDL
* ARGUMENTS:
* MemoryDescriptorList = MDL updated by MmProbeAndLockPages
* AccessMode = Access mode in which to map the MDL
* RETURNS: The base virtual address which maps the buffer
*/
PVOID
STDCALL
MmMapLockedPages (
PMDL MemoryDescriptorList,
KPROCESSOR_MODE AccessMode
);
VOID
STDCALL
MmMapMemoryDumpMdl (
PVOID Unknown0
);
PVOID
STDCALL
MmMapVideoDisplay (
IN PHYSICAL_ADDRESS PhysicalAddress,
IN ULONG NumberOfBytes,
IN MEMORY_CACHING_TYPE CacheType
);
NTSTATUS
STDCALL
MmMapViewInSystemSpace (
IN PVOID Section,
OUT PVOID * MappedBase,
IN PULONG ViewSize
);
NTSTATUS
STDCALL
MmMapViewOfSection (
IN PVOID SectionObject,
IN PEPROCESS Process,
IN OUT PVOID * BaseAddress,
IN ULONG ZeroBits,
IN ULONG CommitSize,
IN OUT PLARGE_INTEGER SectionOffset OPTIONAL,
IN OUT PULONG ViewSize,
IN SECTION_INHERIT InheritDisposition,
IN ULONG AllocationType,
IN ULONG Protect
);
/*
* FUNCTION: Makes the whole driver pageable
* ARGUMENTS:
* AddressWithinSection = Any address within the driver
*/
VOID
STDCALL
MmPageEntireDriver (
PVOID AddressWithinSection
);
/*
* VOID
* MmPrepareMdlForReuse (
* PMDL Mdl
* );
*
* FUNCTION:
* Reinitializes a caller-allocated MDL
*
* ARGUMENTS:
* Mdl = Points to the MDL that will be reused
*/
#define MmPrepareMdlForReuse(Mdl) \
if (((Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) \
{ \
assert(((Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
MmUnmapLockedPages ((Mdl)->MappedSystemVa, (Mdl)); \
} \
else if (((Mdl)->MdlFlags & MDL_PARTIAL) == 0) \
{ \
assert(((Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
}
/*
* FUNCTION: Probes the specified pages, makes them resident and locks
* the physical pages mapped by the virtual address range
* ARGUMENTS:
* MemoryDescriptorList = MDL which supplies the virtual address,
* byte offset and length
* AccessMode = Access mode with which to probe the arguments
* Operation = Types of operation for which the pages should be
* probed
*/
VOID
STDCALL
MmProbeAndLockPages (
PMDL MemoryDescriptorList,
KPROCESSOR_MODE AccessMode,
LOCK_OPERATION Operation
);
/*
* FUNCTION: Returns an estimate of the amount of memory in the system
* RETURNS: Either MmSmallSystem, MmMediumSystem or MmLargeSystem
*/
MM_SYSTEM_SIZE
STDCALL
MmQuerySystemSize (
VOID
);
/*
* FUNCTION: Resets the pageable status of a driver's sections to their
* compile time settings
* ARGUMENTS:
* AddressWithinSection = Any address within the driver
*/
VOID
STDCALL
MmResetDriverPaging (
PVOID AddressWithinSection
);
DWORD
STDCALL
MmSecureVirtualMemory (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2
);
BOOLEAN
STDCALL
MmSetAddressRangeModified (
DWORD Unknown0,
DWORD Unknown1
);
NTSTATUS
STDCALL
MmSetBankedSection (
DWORD Unknown0,
DWORD Unknown1,
DWORD Unknown2,
DWORD Unknown3,
DWORD Unknown4,
DWORD Unknown5
);
/*
* FUNCTION: Returns the number of bytes to allocate for an MDL
* describing a given address range
* ARGUMENTS:
* Base = Base virtual address for the region
* Length = size in bytes of the region
* RETURNS: The number of bytes required for the MDL
*/
ULONG
STDCALL
MmSizeOfMdl (
PVOID Base,
ULONG Length
);
/*
* FUNCTION: Unlocks the physical pages described by a given MDL
* ARGUMENTS:
* Mdl = Mdl to unlock
*/
VOID
STDCALL
MmUnlockPages (
PMDL Mdl
);
/*
* FUNCTION: Releases a section of driver code or data previously locked into
* memory
* ARGUMENTS:
* ImageSectionHandle = Handle for the locked section
*/
VOID
STDCALL
MmUnlockPagableImageSection (
PVOID ImageSectionHandle
);
VOID
STDCALL
MmUnmapIoSpace (
PVOID BaseAddress,
ULONG NumberOfBytes
);
VOID
STDCALL
MmUnmapLockedPages (
PVOID BaseAddress,
PMDL MemoryDescriptorList
);
VOID
STDCALL
MmUnmapVideoDisplay (
IN PVOID BaseAddress,
IN ULONG NumberOfBytes
);
NTSTATUS
STDCALL
MmUnmapViewInSystemSpace (
DWORD Unknown0
);
#if 0
NTSTATUS
STDCALL
MmUnmapViewOfSection (
PEPROCESS Process,
PMEMORY_AREA MemoryArea
)
#endif
VOID
STDCALL
MmUnsecureVirtualMemory (
DWORD Unknown0
);
#endif
+88
View File
@@ -0,0 +1,88 @@
/* $Id: mmtypes.h,v 1.13 2002/09/08 10:47:44 chorns Exp $ */
#ifndef _INCLUDE_DDK_MMTYPES_H
#define _INCLUDE_DDK_MMTYPES_H
#include <ddk/i386/pagesize.h>
#include <ntos/mm.h>
#define PAGE_ROUND_UP(x) ( (((ULONG)x)%PAGESIZE) ? ((((ULONG)x)&(~0xfff))+0x1000) : ((ULONG)x) )
#define PAGE_ROUND_DOWN(x) (((ULONG)x)&(~0xfff))
/*
* FUNCTION: Determines if the given virtual address is page aligned
*/
#define IS_PAGE_ALIGNED(Va) (((ULONG)Va)&0xfff)
/*
* PURPOSE: Returns the byte offset of a field within a structure
*/
#define FIELD_OFFSET(Type,Field) (LONG)(&(((Type *)(0))->Field))
/*
* PURPOSE: Returns the base address structure if the caller knows the
* address of a field within the structure
* ARGUMENTS:
* Address = address of the field
* Type = Type of the whole structure
* Field = Name of the field whose address is none
*/
#define CONTAINING_RECORD(Address,Type,Field) (Type *)(((LONG)Address) - FIELD_OFFSET(Type,Field))
#define MDL_MAPPED_TO_SYSTEM_VA (0x1)
#define MDL_PAGES_LOCKED (0x2)
#define MDL_SOURCE_IS_NONPAGED_POOL (0x4)
#define MDL_ALLOCATED_FIXED_SIZE (0x8)
#define MDL_PARTIAL (0x10)
#define MDL_PARTIAL_HAS_BEEN_MAPPED (0x20)
#define MDL_IO_PAGE_READ (0x40)
#define MDL_WRITE_OPERATION (0x80)
#define MDL_PARENT_MAPPED_SYSTEM_VA (0x100)
#define MDL_LOCK_HELD (0x200)
#define MDL_SCATTER_GATHER_VA (0x400)
#define MDL_IO_SPACE (0x800)
#define MDL_NETWORK_HEADER (0x1000)
#define MDL_MAPPING_CAN_FAIL (0x2000)
#define MDL_ALLOCATED_MUST_SUCCEED (0x4000)
#define MDL_64_BIT_VA (0x8000)
typedef struct _MDL
/*
* PURPOSE: Describes a user buffer passed to a system API
*/
{
struct _MDL* Next;
CSHORT Size;
CSHORT MdlFlags;
struct _EPROCESS* Process;
PVOID MappedSystemVa;
PVOID StartVa;
ULONG ByteCount;
ULONG ByteOffset;
} MDL, *PMDL;
#define MmSmallSystem (0)
#define MmMediumSystem (1)
#define MmLargeSystem (2)
/* Used in MmFlushImageSection */
typedef enum _MMFLUSH_TYPE
{
MmFlushForDelete,
MmFlushForWrite
} MMFLUSH_TYPE;
typedef enum _MEMORY_CACHING_TYPE
{
MmNonCached = FALSE,
MmCached = TRUE,
MmFrameBufferCached,
MmHardwareCoherentCached,
MmMaximumCacheType
} MEMORY_CACHING_TYPE;
#endif
+98
View File
@@ -0,0 +1,98 @@
#ifndef _NTDD8042_
#define _NTDD8042_
#define IOCTL_INTERNAL_I8042_HOOK_KEYBOARD CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_INTERNAL_I8042_HOOK_MOUSE CTL_CODE(FILE_DEVICE_MOUSE, 0x0FF0, METHOD_NEITHER, FILE_ANY_ACCESS)
typedef enum _KEYBOARD_SCAN_STATE {
Normal,
GotE0,
GotE1
} KEYBOARD_SCAN_STATE, *PKEYBOARD_SCAN_STATE;
typedef
NTSTATUS
(*PI8042_SYNCH_READ_PORT) (
IN PVOID Context,
PUCHAR Value,
BOOLEAN WaitForACK
);
typedef
NTSTATUS
(*PI8042_SYNCH_WRITE_PORT) (
IN PVOID Context,
UCHAR Value,
BOOLEAN WaitForACK
);
typedef enum _TRANSMIT_STATE {
Idle = 0,
SendingBytes
} TRANSMIT_STATE;
typedef struct _OUTPUT_PACKET {
PUCHAR Bytes;
ULONG CurrentByte;
ULONG ByteCount;
TRANSMIT_STATE State;
} OUTPUT_PACKET, *POUTPUT_PACKET;
typedef
NTSTATUS
(*PI8042_KEYBOARD_INITIALIZATION_ROUTINE) (
IN PVOID InitializationContext,
IN PVOID SynchFuncContext,
IN PI8042_SYNCH_READ_PORT ReadPort,
IN PI8042_SYNCH_WRITE_PORT WritePort,
OUT PBOOLEAN TurnTranslationOn
);
typedef
BOOLEAN
(*PI8042_KEYBOARD_ISR) (
PVOID IsrContext,
PKEYBOARD_INPUT_DATA CurrentInput,
POUTPUT_PACKET CurrentOutput,
UCHAR StatusByte,
PUCHAR Byte,
PBOOLEAN ContinueProcessing,
PKEYBOARD_SCAN_STATE ScanState
);
typedef struct _INTERNAL_I8042_HOOK_KEYBOARD {
//
// Context variable for all callback routines
//
PVOID Context;
//
// Routine to call after the mouse is reset
//
PI8042_KEYBOARD_INITIALIZATION_ROUTINE InitializationRoutine;
//
// Routine to call when a byte is received via the interrupt
//
PI8042_KEYBOARD_ISR IsrRoutine;
//
// Write function
//
//UNIMPLEMENTED PI8042_ISR_WRITE_PORT IsrWritePort;
//
// Queue the current packet (ie the one passed into the isr callback hook)
// to be reported to the class driver
//
//UNIMPLEMENTED PI8042_QUEUE_PACKET QueueKeyboardPacket;
//
// Context for IsrWritePort, QueueKeyboardPacket
//
//UNIMPLEMENTED PVOID CallContext;
} INTERNAL_I8042_HOOK_KEYBOARD, *PINTERNAL_I8042_HOOK_KEYBOARD;
#endif //_NTDD8042_
+15
View File
@@ -0,0 +1,15 @@
#ifndef _BEEP_H_INCLUDED_
#define _BEEP_H_INCLUDED_
#define IOCTL_BEEP_SET CTL_CODE(FILE_DEVICE_BEEP,0,METHOD_BUFFERED,FILE_ANY_ACCESS)
typedef struct tagBEEP_SET_PARAMETERS
{
ULONG Frequency;
ULONG Duration;
} BEEP_SET_PARAMETERS, *PBEEP_SET_PARAMETERS;
#define BEEP_FREQUENCY_MINIMUM 0x25
#define BEEP_FREQUENCY_MAXIMUM 0x7FFF
#endif /* _BEEP_H_INCLUDED_ */
+64
View File
@@ -0,0 +1,64 @@
#ifndef _NTDDBLUE_H_INCLUDED_
#define _NTDDBLUE_H_INCLUDED_
#include <ntos/console.h>
#define IOCTL_CONSOLE_GET_SCREEN_BUFFER_INFO CTL_CODE(FILE_DEVICE_SCREEN, 0x801, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONSOLE_SET_SCREEN_BUFFER_INFO CTL_CODE(FILE_DEVICE_SCREEN, 0x802, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONSOLE_GET_CURSOR_INFO CTL_CODE(FILE_DEVICE_SCREEN, 0x803, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONSOLE_SET_CURSOR_INFO CTL_CODE(FILE_DEVICE_SCREEN, 0x804, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONSOLE_GET_MODE CTL_CODE(FILE_DEVICE_SCREEN, 0x805, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CONSOLE_SET_MODE CTL_CODE(FILE_DEVICE_SCREEN, 0x806, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONSOLE_FILL_OUTPUT_ATTRIBUTE CTL_CODE(FILE_DEVICE_SCREEN, 0x810, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONSOLE_READ_OUTPUT_ATTRIBUTE CTL_CODE(FILE_DEVICE_SCREEN, 0x811, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
#define IOCTL_CONSOLE_WRITE_OUTPUT_ATTRIBUTE CTL_CODE(FILE_DEVICE_SCREEN, 0x812, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
#define IOCTL_CONSOLE_SET_TEXT_ATTRIBUTE CTL_CODE(FILE_DEVICE_SCREEN, 0x813, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONSOLE_FILL_OUTPUT_CHARACTER CTL_CODE(FILE_DEVICE_SCREEN, 0x820, METHOD_BUFFERED, FILE_WRITE_ACCESS)
#define IOCTL_CONSOLE_READ_OUTPUT_CHARACTER CTL_CODE(FILE_DEVICE_SCREEN, 0x821, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
#define IOCTL_CONSOLE_WRITE_OUTPUT_CHARACTER CTL_CODE(FILE_DEVICE_SCREEN, 0x822, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
#define IOCTL_CONSOLE_DRAW CTL_CODE(FILE_DEVICE_SCREEN, 0x830, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
/* TYPEDEFS **************************************************************/
typedef struct _CONSOLE_MODE
{
DWORD dwMode;
} CONSOLE_MODE, *PCONSOLE_MODE;
typedef struct _OUTPUT_ATTRIBUTE
{
WORD wAttribute;
DWORD nLength;
COORD dwCoord;
DWORD dwTransfered;
} OUTPUT_ATTRIBUTE, *POUTPUT_ATTRIBUTE;
typedef struct _OUTPUT_CHARACTER
{
CHAR cCharacter;
DWORD nLength;
COORD dwCoord;
DWORD dwTransfered;
} OUTPUT_CHARACTER, *POUTPUT_CHARACTER;
typedef struct _CONSOLE_DRAW
{
SHORT X; // Origin
SHORT Y;
SHORT SizeX; // Size of the screen buffer
SHORT SizeY;
} CONSOLE_DRAW, *PCONSOLE_DRAW;
#endif /* _NTDDBLUE_H_INCLUDED_ */
+90
View File
@@ -0,0 +1,90 @@
/* $Id: ntddk.h,v 1.31 2002/09/08 10:47:44 chorns Exp $
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: include/ddk/ntddk.h
* PURPOSE: Interface definitions for drivers
* PROGRAMMER: David Welch ([email protected])
* UPDATE HISTORY:
* 15/05/98: Created
*/
#ifndef __NTDDK_H
#define __NTDDK_H
#ifdef __cplusplus
extern "C"
{
#endif
/* INCLUDES ***************************************************************/
#define FASTCALL __attribute__((fastcall))
#define STATIC static
#ifndef _GNU_H_WINDOWS_H
/* NASTY HACK! Our msvcrt are messed up, causing msvcrt.dll to crash when
* the headers are mixed with MinGW msvcrt headers. Not including stdlib.h
* seems to correct this.
*/
#include <stdlib.h>
#include <string.h>
#endif
#include <ntos/types.h>
#include <ntos/time.h>
#include <ntos/cdrom.h>
#include <ntos/disk.h>
#include <ntos/registry.h>
#include <ntos/port.h>
#include <napi/types.h>
#include <pe.h>
#include <ddk/status.h>
#include <ddk/ntdef.h>
#include <ddk/defines.h>
#include <ddk/types.h>
#include <ddk/cmtypes.h>
#include <ddk/ketypes.h>
#include <ntos/security.h>
#include <ddk/obtypes.h>
#include <ddk/setypes.h>
#include <ddk/mmtypes.h>
#include <ddk/potypes.h>
#include <ddk/pnptypes.h>
#include <ddk/iotypes.h>
#include <ddk/extypes.h>
#include <ddk/pstypes.h>
#include <ddk/ldrtypes.h>
#include <ddk/zwtypes.h>
#include <ddk/ioctrl.h>
#include <ddk/rtltypes.h>
#include <ddk/haltypes.h>
#include <napi/shared_data.h>
#include <ddk/zw.h>
#include <ddk/rtl.h>
#include <ddk/dbgfuncs.h>
#include <ddk/ldrfuncs.h>
#include <ddk/cmfuncs.h>
#if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__)
#include <ddk/exfuncs.h>
#include <ddk/halfuncs.h>
#include <ddk/mmfuncs.h>
#include <ddk/kdfuncs.h>
#include <ddk/kefuncs.h>
#include <ddk/pofuncs.h>
#include <ddk/pnpfuncs.h>
#include <ddk/iofuncs.h>
#include <ddk/psfuncs.h>
#include <ddk/obfuncs.h>
#include <ddk/sefuncs.h>
#endif /*__NTOSKRNL__ || __NTDRIVER__ || __NTHAL__ */
#ifdef __cplusplus
};
#endif
#endif /* __NTDDK_H */
+19
View File
@@ -0,0 +1,19 @@
#ifndef _NTDDKBD_
#define _NTDDKBD_
typedef struct _KEYBOARD_INPUT_DATA {
//
// Unit number. E.g., for \Device\KeyboardPort0 the unit is '0',
// for \Device\KeyboardPort1 the unit is '1', and so on.
//
USHORT UnitId;
USHORT MakeCode;
USHORT Flags;
USHORT Reserved;
ULONG ExtraInformation;
} KEYBOARD_INPUT_DATA, *PKEYBOARD_INPUT_DATA;
#endif // _NTDDKBD_
+453
View File
@@ -0,0 +1,453 @@
/*
* NTDDVID.H - Video Port and MiniPort driver interface
*/
#include <ddk/miniport.h>
/*
* the rough idea:
* init:
* miniport driver defines entrypoint thusly:
* ULONG DriverEntry(PVOID Context1, PVOID Context2);
* miniport allocates and initializes a VIDEO_HW_INIT_DATA struct
* miniport calls VideoPortInitialize
* video port driver handles init of DriverObject (Context1)
* video port driver calls back into HwVidFindAdapter entry point
* video port driver finishes up and returns the status code that
* the miniport driver should return.
* io requests:
* video port driver reformats IRP into VRP
* video port driver calls back into HwVidStartIO entry point
* minimum IoControlCodes that must be handles by the miniport:
* IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES
* IOCTL_VIDEO_QUERY_AVAIL_MODES
* IOCTL_VIDEO_SET_CURRENT_MODE
* IOCTL_VIDEO_MAP_MEMORY
* IOCTL_VIDEO_RESET_DEVICE
* interrupts are handled the same as KM drivers.
*/
typedef LONG VP_STATUS, *PVP_STATUS;
// Bit definitions for Attribute Flags
#define VIDEO_MODE_COLOR 0x0001
#define VIDEO_MODE_GRAPHICS 0x0002
#define VIDEO_MODE_PALETTE_DRIVEN 0x0004
#define VIDEO_MEMORY_SPACE_MEMORY 0x00
#define VIDEO_MEMORY_SPACE_IO 0x01
#define VIDEO_MEMORY_SPACE_USER_MODE 0x02
#define VIDEO_MEMORY_SPACE_DENSE 0x04
#define VIDEO_MEMORY_SPACE_P6CACHE 0x08
typedef struct _VIDEO_POINTER_CAPABILITIES
{
ULONG Flags;
ULONG MaxWidth;
ULONG MaxHeight;
ULONG HWPtrBitmapStart;
ULONG HWPtrBitmapEnd;
} VIDEO_POINTER_CAPABILITIES, *PVIDEO_POINTER_CAPABILITIES;
typedef struct _VIDEO_POINTER_ATTRIBUTES
{
ULONG Flags;
ULONG Width;
ULONG Height;
ULONG WidthInBytes;
ULONG Enable;
SHORT Column;
SHORT Row;
UCHAR Pixels[1];
} VIDEO_POINTER_ATTRIBUTES, *PVIDEO_POINTER_ATTRIBUTES;
typedef enum _VIDEO_BANK_TYPE
{
VideoNotBanked = 0,
VideoBanked1RW,
VideoBanked1R1W,
VideoBanked2RW,
NumVideoBankTypes
} VIDEO_BANK_TYPE, *PVIDEO_BANK_TYPE;
typedef struct _VIDEO_BANK_SELECT
{
ULONG Length;
ULONG Size;
ULONG BankingFlags;
ULONG BankingType;
ULONG PlanarHCBankingType;
ULONG BitmapWidthInBytes;
ULONG BitmapSize;
ULONG Granularity;
ULONG PlanarHCGranularity;
ULONG CodeOffset;
ULONG PlanarHCBankCodeOffset;
ULONG PlanarHCEnableCodeOffset;
ULONG PlanarHCDisableCodeOffset;
} VIDEO_BANK_SELECT, *PVIDEO_BANK_SELECT;
typedef struct _VIDEO_CLUTDATA
{
UCHAR Red;
UCHAR Green;
UCHAR Blue;
UCHAR Unused;
} VIDEO_CLUTDATA, *PVIDEO_CLUTDATA;
typedef struct _VIDEO_NUM_MODES
{
ULONG NumModes;
ULONG ModeInformationLength;
} VIDEO_NUM_MODES, *PVIDEO_NUM_MODES;
typedef struct _VIDEO_MODE_INFORMATION
{
ULONG Length;
ULONG ModeIndex;
ULONG VisScreenWidth;
ULONG VisScreenHeight;
ULONG ScreenStride;
ULONG NumberOfPlanes;
ULONG BitsPerPlane;
ULONG Frequency;
ULONG XMillimeter;
ULONG YMillimeter;
ULONG NumberRedBits;
ULONG NumberGreenBits;
ULONG NumberBlueBits;
ULONG RedMask;
ULONG GreenMask;
ULONG BlueMask;
ULONG AttributeFlags;
ULONG VideoMemoryBitmapWidth;
ULONG VideoMemoryBitmapHeight;
ULONG DriverSpecificAttributeFlags;
} VIDEO_MODE_INFORMATION, *PVIDEO_MODE_INFORMATION;
typedef enum _VIDEO_DEVICE_DATA_TYPE
{
VpMachineData,
VpCmosData,
VpBusData,
VpControllerData,
VpMonitorData
} VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE;
typedef enum _VIDEO_SYNCHRONIZE_PRIORITY
{
VpLowPriority,
VpMediumPriority,
VpHighPriority
} VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY;
typedef struct _STATUS_BLOCK
{
VP_STATUS Status;
ULONG Information;
} STATUS_BLOCK, *PSTATUS_BLOCK;
typedef struct _VIDEO_REQUEST_PACKET
{
ULONG IoControlCode;
PSTATUS_BLOCK StatusBlock;
PVOID InputBuffer;
ULONG InputBufferLength;
PVOID OutputBuffer;
ULONG OutputBufferLength;
} VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET;
#define IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES CTL_CODE(FILE_DEVICE_VIDEO, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_QUERY_AVAIL_MODES CTL_CODE(FILE_DEVICE_VIDEO, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_QUERY_CURRENT_MODE CTL_CODE(FILE_DEVICE_VIDEO, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_SET_CURRENT_MODE CTL_CODE(FILE_DEVICE_VIDEO, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_RESET_DEVICE CTL_CODE(FILE_DEVICE_VIDEO, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_MAP_VIDEO_MEMORY CTL_CODE(FILE_DEVICE_VIDEO, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_UNMAP_VIDEO_MEMORY CTL_CODE(FILE_DEVICE_VIDEO, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_SHARE_VIDEO_MEMORY CTL_CODE(FILE_DEVICE_VIDEO, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY CTL_CODE(FILE_DEVICE_VIDEO, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_GET_PUBLIC_ACCESS_RANGES CTL_CODE(FILE_DEVICE_VIDEO, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES CTL_CODE(FILE_DEVICE_VIDEO, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_GET_POWER_MANAGEMENT CTL_CODE(FILE_DEVICE_VIDEO, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_SET_POWER_MANAGEMENT CTL_CODE(FILE_DEVICE_VIDEO, 12, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_COLOR_CAPABILITIES CTL_CODE(FILE_DEVICE_VIDEO, 13, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_SET_COLOR_REGISTERS CTL_CODE(FILE_DEVICE_VIDEO, 14, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_DISABLE_POINTER CTL_CODE(FILE_DEVICE_VIDEO, 15, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_ENABLE_POINTER CTL_CODE(FILE_DEVICE_VIDEO, 16, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES CTL_CODE(FILE_DEVICE_VIDEO, 17, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_QUERY_POINTER_ATTR CTL_CODE(FILE_DEVICE_VIDEO, 18, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_SET_POINTER_ATTR CTL_CODE(FILE_DEVICE_VIDEO, 19, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_QUERY_POINTER_POSITION CTL_CODE(FILE_DEVICE_VIDEO, 20, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_SET_POINTER_POSITION CTL_CODE(FILE_DEVICE_VIDEO, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_SAVE_HARDWARE_STATE CTL_CODE(FILE_DEVICE_VIDEO, 22, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_RESTORE_HARDWARE_STATE CTL_CODE(FILE_DEVICE_VIDEO, 23, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_DISABLE_CURSOR CTL_CODE(FILE_DEVICE_VIDEO, 24, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_ENABLE_CURSOR CTL_CODE(FILE_DEVICE_VIDEO, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_QUERY_CURSOR_ATTR CTL_CODE(FILE_DEVICE_VIDEO, 26, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_SET_CURSOR_ATTR CTL_CODE(FILE_DEVICE_VIDEO, 27, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_QUERY_CURSOR_POSITION CTL_CODE(FILE_DEVICE_VIDEO, 28, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_SET_CURSOR_POSITION CTL_CODE(FILE_DEVICE_VIDEO, 29, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_GET_BANK_SELECT_CODE CTL_CODE(FILE_DEVICE_VIDEO, 30, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_SET_PALETTE_REGISTERS CTL_CODE(FILE_DEVICE_VIDEO, 31, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VIDEO_LOAD_AND_SET_FONT CTL_CODE(FILE_DEVICE_VIDEO, 32, METHOD_BUFFERED, FILE_ANY_ACCESS)
typedef struct _VIDEO_PORT_CONFIG_INFO
{
ULONG Length;
ULONG SystemIoBusNumber;
INTERFACE_TYPE AdapterInterfaceType;
ULONG BusInterruptLevel;
ULONG BusInterruptVector;
KINTERRUPT_MODE InterruptMode;
ULONG NumEmulatorAccessEntries;
PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries;
ULONG EmulatorAccessEntriesContext;
PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress;
ULONG VdmPhysicalVideoMemoryLength;
ULONG HardwareStateSize;
ULONG DmaChannel;
ULONG DmaPort;
UCHAR DmaShareable;
UCHAR InterruptShareable;
} VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO;
typedef VP_STATUS STDCALL
(*PVIDEO_HW_FIND_ADAPTER)(PVOID HwDeviceExtension,
PVOID HwContext,
PWSTR ArgumentString,
PVIDEO_PORT_CONFIG_INFO ConfigInfo,
PUCHAR Again);
typedef BOOLEAN STDCALL
(*PVIDEO_HW_INITIALIZE)(PVOID HwDeviceExtension);
typedef BOOLEAN STDCALL
(*PVIDEO_HW_INTERRUPT)(PVOID HwDeviceExtension);
typedef BOOLEAN STDCALL
(*PVIDEO_HW_START_IO)(PVOID HwDeviceExtension,
PVIDEO_REQUEST_PACKET RequestPacket);
typedef BOOLEAN STDCALL
(*PVIDEO_HW_RESET_HW)(PVOID HwDeviceExtension,
ULONG Columns,
ULONG Rows);
typedef VOID STDCALL
(*PVIDEO_HW_TIMER)(PVOID HwDeviceExtension);
typedef struct _VIDEO_HW_INITIALIZATION_DATA
{
ULONG HwInitDataSize;
INTERFACE_TYPE AdapterInterfaceType;
PVIDEO_HW_FIND_ADAPTER HwFindAdapter;
PVIDEO_HW_INITIALIZE HwInitialize;
PVIDEO_HW_INTERRUPT HwInterrupt;
PVIDEO_HW_START_IO HwStartIO;
ULONG HwDeviceExtensionSize;
ULONG StartingDeviceNumber;
PVIDEO_HW_RESET_HW HwResetHw;
PVIDEO_HW_TIMER HwTimer;
} VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA;
typedef VP_STATUS STDCALL
(*PMINIPORT_GET_REGISTRY_ROUTINE)(PVOID HwDeviceExtension,
PVOID Context,
PWSTR ValueName,
PVOID ValueData,
ULONG ValueLength);
typedef VP_STATUS STDCALL
(*PMINIPORT_QUERY_DEVICE_ROUTINE)(PVOID HwDeviceExtension,
PVOID Context,
VIDEO_DEVICE_DATA_TYPE DeviceDataType,
PVOID Identifier,
ULONG IdentiferLength,
PVOID ConfigurationData,
ULONG ConfigurationDataLength,
PVOID ComponentInformation,
ULONG ComponentInformationLength);
typedef BOOLEAN STDCALL
(*PMINIPORT_SYNCHRONIZE_ROUTINE)(PVOID Context);
typedef struct _VIDEO_ACCESS_RANGE
{
PHYSICAL_ADDRESS RangeStart;
ULONG RangeLength;
UCHAR RangeInIoSpace;
UCHAR RangeVisible;
UCHAR RangeShareable;
} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
typedef struct _VIDEO_X86_BIOS_ARGUMENTS
{
ULONG Eax;
ULONG Ebx;
ULONG Ecx;
ULONG Edx;
ULONG Esi;
ULONG Edi;
ULONG Ebp;
} VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS;
typedef VOID STDCALL
(*PBANKED_SECTION_ROUTINE)(IN ULONG ReadBank,
IN ULONG WriteBank,
IN PVOID Context);
typedef struct
{
USHORT NumEntries;
USHORT FirstEntry;
union
{
VIDEO_CLUTDATA RgbArray;
ULONG RgbLong;
} LookupTable[1];
} VIDEO_CLUT, *PVIDEO_CLUT;
typedef struct _VIDEO_MEMORY
{
PVOID RequestedVirtualAddress;
} VIDEO_MEMORY, *PVIDEO_MEMORY;
typedef struct _VIDEO_MEMORY_INFORMATION
{
PVOID VideoRamBase;
ULONG VideoRamLength;
PVOID FrameBufferBase;
ULONG FrameBufferLength;
} VIDEO_MEMORY_INFORMATION, *PVIDEO_MEMORY_INFORMATION;
typedef struct _VIDEO_MODE
{
ULONG RequestedMode;
} VIDEO_MODE, *PVIDEO_MODE;
typedef struct _VIDEO_SHARE_MEMORY
{
HANDLE ProcessHandle;
ULONG ViewOffset;
ULONG ViewSize;
PVOID RequestedVirtualAddress;
} VIDEO_SHARE_MEMORY, *PVIDEO_SHARE_MEMORY;
ULONG STDCALL VideoPortCompareMemory(IN PVOID Source1, IN PVOID Source2, IN ULONG Length);
VOID VideoPortDebugPrint(IN ULONG DebugPrintLevel, IN PCHAR DebugMessage, ...);
VP_STATUS STDCALL VideoPortDisableInterrupt(IN PVOID HwDeviceExtension);
VP_STATUS STDCALL VideoPortEnableInterrupt(IN PVOID HwDeviceExtension);
VOID STDCALL VideoPortFreeDeviceBase(IN PVOID HwDeviceExtension, IN PVOID MappedAddress);
ULONG STDCALL VideoPortGetBusData(IN PVOID HwDeviceExtension,
IN BUS_DATA_TYPE BusDataType,
IN ULONG SlotNumber,
OUT PVOID Buffer,
IN ULONG Offset,
IN ULONG Length);
UCHAR STDCALL VideoPortGetCurrentIrql(VOID);
PVOID STDCALL VideoPortGetDeviceBase(IN PVOID HwDeviceExtension,
IN PHYSICAL_ADDRESS IoAddress,
IN ULONG NumberOfUchars,
IN UCHAR InIoSpace);
VP_STATUS STDCALL VideoPortGetDeviceData(IN PVOID HwDeviceExtension,
IN VIDEO_DEVICE_DATA_TYPE DeviceDataType,
IN PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine,
IN PVOID Context);
VP_STATUS STDCALL VideoPortGetAccessRanges(IN PVOID HwDeviceExtension,
IN ULONG NumRequestedResources,
IN PIO_RESOURCE_DESCRIPTOR RequestedResources OPTIONAL,
IN ULONG NumAccessRanges,
IN PVIDEO_ACCESS_RANGE AccessRanges,
IN PVOID VendorId,
IN PVOID DeviceId,
IN PULONG Slot);
VP_STATUS STDCALL VideoPortGetRegistryParameters(IN PVOID HwDeviceExtension,
IN PWSTR ParameterName,
IN UCHAR IsParameterFileName,
IN PMINIPORT_GET_REGISTRY_ROUTINE GetRegistryRoutine,
IN PVOID Context);
ULONG STDCALL VideoPortInitialize(IN PVOID Context1,
IN PVOID Context2,
IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData,
IN PVOID HwContext);
VP_STATUS STDCALL VideoPortInt10(IN PVOID HwDeviceExtension,
IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments);
VOID STDCALL VideoPortLogError(IN PVOID HwDeviceExtension,
IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL,
IN VP_STATUS ErrorCode,
IN ULONG UniqueId);
VP_STATUS STDCALL VideoPortMapBankedMemory(IN PVOID HwDeviceExtension,
IN PHYSICAL_ADDRESS PhysicalAddress,
IN PULONG Length,
IN PULONG InIoSpace,
OUT PVOID *VirtualAddress,
IN ULONG BankLength,
IN UCHAR ReadWriteBank,
IN PBANKED_SECTION_ROUTINE BankRoutine,
IN PVOID Context);
VP_STATUS STDCALL VideoPortMapMemory(IN PVOID HwDeviceExtension,
IN PHYSICAL_ADDRESS PhysicalAddress,
IN PULONG Length,
IN PULONG InIoSpace,
OUT PVOID *VirtualAddress);
VOID STDCALL VideoPortMoveMemory(OUT PVOID Destination,
IN PVOID Source,
IN ULONG Length);
UCHAR STDCALL VideoPortReadPortUchar(IN PUCHAR Port);
USHORT STDCALL VideoPortReadPortUshort(IN PUSHORT Port);
ULONG STDCALL VideoPortReadPortUlong(IN PULONG Port);
VOID STDCALL VideoPortReadPortBufferUchar(IN PUCHAR Port, OUT PUCHAR Buffer, IN ULONG Count);
VOID STDCALL VideoPortReadPortBufferUshort(IN PUSHORT Port, OUT PUSHORT Buffer, IN ULONG Count);
VOID STDCALL VideoPortReadPortBufferUlong(IN PULONG Port, OUT PULONG Buffer, IN ULONG Count);
UCHAR STDCALL VideoPortReadRegisterUchar(IN PUCHAR Register);
USHORT STDCALL VideoPortReadRegisterUshort(IN PUSHORT Register);
ULONG STDCALL VideoPortReadRegisterUlong(IN PULONG Register);
VOID STDCALL VideoPortReadRegisterBufferUchar(IN PUCHAR Register, OUT PUCHAR Buffer, IN ULONG Count);
VOID STDCALL VideoPortReadRegisterBufferUshort(IN PUSHORT Register, OUT PUSHORT Buffer, IN ULONG Count);
VOID STDCALL VideoPortReadRegisterBufferUlong(IN PULONG Register, OUT PULONG Buffer, IN ULONG Count);
BOOLEAN STDCALL VideoPortScanRom(IN PVOID HwDeviceExtension,
IN PUCHAR RomBase,
IN ULONG RomLength,
IN PUCHAR String);
ULONG STDCALL VideoPortSetBusData(IN PVOID HwDeviceExtension,
IN BUS_DATA_TYPE BusDataType,
IN ULONG SlotNumber,
IN PVOID Buffer,
IN ULONG Offset,
IN ULONG Length);
VP_STATUS STDCALL VideoPortSetRegistryParameters(IN PVOID HwDeviceExtension,
IN PWSTR ValueName,
IN PVOID ValueData,
IN ULONG ValueLength);
VP_STATUS STDCALL VideoPortSetTrappedEmulatorPorts(IN PVOID HwDeviceExtension,
IN ULONG NumAccessRanges,
IN PVIDEO_ACCESS_RANGE AccessRange);
VOID STDCALL VideoPortStallExecution(IN ULONG Microseconds);
VOID STDCALL VideoPortStartTimer(IN PVOID HwDeviceExtension);
VOID STDCALL VideoPortStopTimer(IN PVOID HwDeviceExtension);
BOOLEAN STDCALL VideoPortSynchronizeExecution(IN PVOID HwDeviceExtension,
IN VIDEO_SYNCHRONIZE_PRIORITY Priority,
IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine,
OUT PVOID Context);
VP_STATUS STDCALL VideoPortUnmapMemory(IN PVOID HwDeviceExtension,
IN PVOID VirtualAddress,
IN HANDLE ProcessHandle);
VP_STATUS STDCALL VideoPortVerifyAccessRanges(IN PVOID HwDeviceExtension,
IN ULONG NumAccessRanges,
IN PVIDEO_ACCESS_RANGE AccessRanges);
VOID STDCALL VideoPortWritePortUchar(IN PUCHAR Port, IN UCHAR Value);
VOID STDCALL VideoPortWritePortUshort(IN PUSHORT Port, IN USHORT Value);
VOID STDCALL VideoPortWritePortUlong(IN PULONG Port, IN ULONG Value);
VOID STDCALL VideoPortWritePortBufferUchar(IN PUCHAR Port, IN PUCHAR Buffer, IN ULONG Count);
VOID STDCALL VideoPortWritePortBufferUshort(IN PUSHORT Port, IN PUSHORT Buffer, IN ULONG Count);
VOID STDCALL VideoPortWritePortBufferUlong(IN PULONG Port, IN PULONG Buffer, IN ULONG Count);
VOID STDCALL VideoPortWriteRegisterUchar(IN PUCHAR Register, IN UCHAR Value);
VOID STDCALL VideoPortWriteRegisterUshort(IN PUSHORT Register, IN USHORT Value);
VOID STDCALL VideoPortWriteRegisterUlong(IN PULONG Register, IN ULONG Value);
VOID STDCALL VideoPortWriteRegisterBufferUchar(IN PUCHAR Register, IN PUCHAR Buffer, IN ULONG Count);
VOID STDCALL VideoPortWriteRegisterBufferUshort(IN PUSHORT Register, IN PUSHORT Buffer, IN ULONG Count);
VOID STDCALL VideoPortWriteRegisterBufferUlong(IN PULONG Register, IN PULONG Buffer, IN ULONG Count);
VOID STDCALL VideoPortZeroMemory(OUT PVOID Destination, IN ULONG Length);
VOID STDCALL VideoPortZeroDeviceMemory(OUT PVOID Destination, IN ULONG Length);
+13
View File
@@ -0,0 +1,13 @@
#ifndef __INCLUDE_DDK_NTDEF_H
#define __INCLUDE_DDK_NTDEF_H
struct _KTHREAD;
struct _ETHREAD;
struct _EPROCESS;
#define NTKERNELAPI
#define NTSYSAPI
#define NTAPI
#endif
+41
View File
@@ -0,0 +1,41 @@
#ifndef __INCLUDE_DDK_NTIFS_H
#define __INCLUDE_DDK_NTIFS_H
struct _BCB;
typedef struct _BCB* PBCB;
struct _MEMORY_AREA;
struct _CACHE_SEGMENT;
typedef struct _CACHE_SEGMENT* PCACHE_SEGMENT;
NTSTATUS STDCALL
CcRosReleaseCacheSegment (struct _BCB* Bcb,
struct _CACHE_SEGMENT* CacheSeg,
BOOLEAN Valid,
BOOLEAN Dirty,
BOOLEAN Mapped);
NTSTATUS STDCALL
CcRosRequestCacheSegment (struct _BCB* Bcb,
ULONG FileOffset,
PVOID* BaseAddress,
PBOOLEAN UptoDate,
struct _CACHE_SEGMENT** CacheSeg);
NTSTATUS STDCALL
CcRosInitializeFileCache (PFILE_OBJECT FileObject,
struct _BCB** Bcb,
ULONG CacheSegmentSize);
NTSTATUS STDCALL
CcRosReleaseFileCache (PFILE_OBJECT FileObject,
struct _BCB* Bcb);
#include <ddk/cctypes.h>
#include <ddk/ccfuncs.h>
#include <ddk/fstypes.h>
#include <ddk/fsfuncs.h>
#endif /* __INCLUDE_DDK_NTIFS_H */
+180
View File
@@ -0,0 +1,180 @@
#ifndef _INCLUDE_DDK_OBFUNCS_H
#define _INCLUDE_DDK_OBFUNCS_H
/* OBJECT MANAGER ************************************************************/
NTSTATUS STDCALL
ObAssignSecurity(IN PACCESS_STATE AccessState,
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
IN PVOID Object,
IN POBJECT_TYPE Type);
/*
BOOLEAN STDCALL
ObCheckCreateObjectAccess(IN PVOID Object,
IN ACCESS_MASK DesiredAccess,
ULONG Param3,
ULONG Param4,
ULONG Param5,
IN KPROCESSOR_MODE AccessMode,
OUT PNTSTATUS AccessStatus);
*/
/*
BOOLEAN STDCALL
ObCheckObjectAccess(IN PVOID Object,
ULONG Param2,
ULONG Param3,
IN KPROCESSOR_MODE AccessMode,
OUT PACCESS_MODE GrantedAccess);
*/
NTSTATUS STDCALL
ObCreateObject(OUT PHANDLE Handle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
IN POBJECT_TYPE Type,
OUT PVOID *Object);
#if 0
/* original implementation */
NTSTATUS STDCALL
ObCreateObject(IN KPROCESSOR_MODE ObjectAttributesAccessMode OPTIONAL,
IN POBJECT_TYPE Type,
IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
IN KPROCESSOR_MODE AccessMode,
IN OUT PVOID ParseContext OPTIONAL,
IN ULONG ObjectSize,
IN ULONG PagedPoolCharge OPTIONAL,
IN ULONG NonPagedPoolCharge OPTIONAL,
OUT PVOID *Object);
#endif
VOID FASTCALL
ObfDereferenceObject(IN PVOID Object);
VOID FASTCALL
ObfReferenceObject(IN PVOID Object);
#define ObDereferenceObject(Object) \
ObfDereferenceObject(Object)
#define ObReferenceObject(Object) \
ObfReferenceObject(Object)
/*
BOOLEAN STDCALL
ObFindHandleForObject(ULONG Param1,
ULONG Param2,
ULONG Param3,
ULONG Param4);
*/
ULONG STDCALL
ObGetObjectPointerCount(IN PVOID Object);
NTSTATUS STDCALL
ObGetObjectSecurity(IN PVOID Object,
OUT PSECURITY_DESCRIPTOR *SecurityDescriptor,
OUT PBOOLEAN MemoryAllocated);
NTSTATUS STDCALL
ObInsertObject(IN PVOID Object,
IN PACCESS_STATE PassedAccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess,
IN ULONG AdditionalReferences,
OUT PVOID* ReferencedObject OPTIONAL,
OUT PHANDLE Handle);
VOID STDCALL
ObMakeTemporaryObject(IN PVOID ObjectBody);
NTSTATUS STDCALL
ObOpenObjectByName(IN POBJECT_ATTRIBUTES ObjectAttributes,
IN POBJECT_TYPE ObjectType,
IN OUT PVOID ParseContext OPTIONAL,
IN KPROCESSOR_MODE AccessMode,
IN ACCESS_MASK DesiredAccess,
IN PACCESS_STATE PassedAccessState,
OUT PHANDLE Handle);
NTSTATUS STDCALL
ObOpenObjectByPointer(IN PVOID Object,
IN ULONG HandleAttributes,
IN PACCESS_STATE PassedAccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess OPTIONAL,
IN POBJECT_TYPE ObjectType OPTIONAL,
IN KPROCESSOR_MODE AccessMode,
OUT PHANDLE Handle);
NTSTATUS STDCALL
ObQueryNameString(IN PVOID Object,
OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
IN ULONG Length,
OUT PULONG ReturnLength);
NTSTATUS STDCALL
ObQueryObjectAuditingByHandle(IN HANDLE Handle,
OUT PBOOLEAN GenerateOnClose);
/*
* FUNCTION: Performs access validation on an object handle and if access
* is granted returns a pointer to the object's body
* ARGUMENTS:
* Handle = Handle to the object
* DesiredAccess = Desired access to the object
* ObjectType (OPTIONAL) = Pointer to the object's type definition
* AccessMode = Access mode to use for the check
* Object (OUT) = Caller supplied storage for a pointer to the object's
* body
* HandleInformation (OUT) = Points to a structure which receives
* information about the handle
* RETURNS: Status
*/
NTSTATUS STDCALL
ObReferenceObjectByHandle(IN HANDLE Handle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_TYPE ObjectType OPTIONAL,
IN KPROCESSOR_MODE AccessMode,
OUT PVOID* Object,
OUT POBJECT_HANDLE_INFORMATION HandleInfo OPTIONAL);
/*
* FUNCTION: Increments the reference count for a given object
* ARGUMENTS:
* Object = Points to the body of the object
* AccessMode = Requested access to the object
* ObjectType = Pointer to the object's type definition
* AccessMode = Access mode to use for the security check
* RETURNS: Status
*/
NTSTATUS STDCALL
ObReferenceObjectByPointer(IN PVOID Object,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_TYPE ObjectType,
IN KPROCESSOR_MODE AccessMode);
NTSTATUS STDCALL
ObReferenceObjectByName(IN PUNICODE_STRING ObjectPath,
IN ULONG Attributes,
IN PACCESS_STATE PassedAccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess OPTIONAL,
IN POBJECT_TYPE ObjectType,
IN KPROCESSOR_MODE AccessMode,
IN OUT PVOID ParseContext OPTIONAL,
OUT PVOID* ObjectPtr);
VOID STDCALL
ObReleaseObjectSecurity(IN PSECURITY_DESCRIPTOR SecurityDescriptor,
IN BOOLEAN MemoryAllocated);
/*
NTSTATUS STDCALL
ObSetSecurityDescriptorInfo(IN PVOID Object,
IN PSECURITY_INFORMATION SecurityInformation,
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
ULONG Param4,
IN POOL_TYPE PoolType,
IN PGENERIC_MAPPING GenericMapping);
*/
#endif /* ndef _INCLUDE_DDK_OBFUNCS_H */
+199
View File
@@ -0,0 +1,199 @@
#ifndef _INCLUDE_DDK_OBTYPES_H
#define _INCLUDE_DDK_OBTYPES_H
/* $Id: obtypes.h,v 1.18 2002/09/08 10:47:45 chorns Exp $ */
struct _DIRECTORY_OBJECT;
struct _OBJECT_ATTRIBUTES;
typedef ULONG ACCESS_STATE, *PACCESS_STATE;
typedef struct _OBJECT_HANDLE_INFORMATION {
ULONG HandleAttributes;
ACCESS_MASK GrantedAccess;
} OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
typedef struct _OBJECT_TYPE
{
/*
* PURPOSE: Tag to be used when allocating objects of this type
*/
ULONG Tag;
/*
* PURPOSE: Name of the type
*/
UNICODE_STRING TypeName;
/*
* PURPOSE: Total number of objects of this type
*/
ULONG TotalObjects;
/*
* PURPOSE: Total number of handles of this type
*/
ULONG TotalHandles;
/*
* PURPOSE: Maximum objects of this type
*/
ULONG MaxObjects;
/*
* PURPOSE: Maximum handles of this type
*/
ULONG MaxHandles;
/*
* PURPOSE: Paged pool charge
*/
ULONG PagedPoolCharge;
/*
* PURPOSE: Nonpaged pool charge
*/
ULONG NonpagedPoolCharge;
/*
* PURPOSE: Mapping of generic access rights
*/
PGENERIC_MAPPING Mapping;
/*
* PURPOSE: Dumps the object
* NOTE: To be defined
*/
VOID STDCALL (*Dump)(VOID);
/*
* PURPOSE: Opens the object
* NOTE: To be defined
*/
VOID STDCALL (*Open)(VOID);
/*
* PURPOSE: Called to close an object if OkayToClose returns true
*/
VOID STDCALL (*Close)(PVOID ObjectBody,
ULONG HandleCount);
/*
* PURPOSE: Called to delete an object when the last reference is removed
*/
VOID STDCALL (*Delete)(PVOID ObjectBody);
/*
* PURPOSE: Called when an open attempts to open a file apparently
* residing within the object
* RETURNS
* STATUS_SUCCESS NextObject was found
* STATUS_UNSUCCESSFUL NextObject not found
* STATUS_REPARSE Path changed, restart parsing the path
*/
NTSTATUS STDCALL (*Parse)(PVOID ParsedObject,
PVOID *NextObject,
PUNICODE_STRING FullPath,
PWSTR *Path,
ULONG Attributes);
/*
*/
NTSTATUS STDCALL (*Security)(PVOID Object,
ULONG InfoClass,
PVOID Info,
PULONG InfoLength);
/*
*/
VOID STDCALL (*QueryName)(VOID);
/*
* PURPOSE: Called when a process asks to close the object
*/
VOID STDCALL (*OkayToClose)(VOID);
NTSTATUS STDCALL (*Create)(PVOID ObjectBody,
PVOID Parent,
PWSTR RemainingPath,
struct _OBJECT_ATTRIBUTES* ObjectAttributes);
VOID STDCALL (*DuplicationNotify)(PEPROCESS DuplicateTo,
PEPROCESS DuplicateFrom,
PVOID Object);
} OBJECT_TYPE, *POBJECT_TYPE;
typedef struct _OBJECT_HEADER
/*
* PURPOSE: Header for every object managed by the object manager
*/
{
UNICODE_STRING Name;
LIST_ENTRY Entry;
LONG RefCount;
LONG HandleCount;
BOOLEAN CloseInProcess;
BOOLEAN Permanent;
struct _DIRECTORY_OBJECT* Parent;
POBJECT_TYPE ObjectType;
/*
* PURPOSE: Object type
* NOTE: This overlaps the first member of the object body
*/
CSHORT Type;
/*
* PURPOSE: Object size
* NOTE: This overlaps the second member of the object body
*/
CSHORT Size;
} OBJECT_HEADER, *POBJECT_HEADER;
typedef struct _OBJECT_ATTRIBUTES
{
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
SECURITY_DESCRIPTOR *SecurityDescriptor;
SECURITY_QUALITY_OF_SERVICE *SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
typedef struct _HANDLE_TABLE
{
LIST_ENTRY ListHead;
KSPIN_LOCK ListLock;
} HANDLE_TABLE, *PHANDLE_TABLE;
extern POBJECT_TYPE ObDirectoryType;
#if 0
#define OBJECT_TYPE_0 0
#define OBJECT_TYPE_1 1
#define OBJECT_TYPE_DIRECTORY 2
#define OBJECT_TYPE_SYMBOLICLINK 3
#define OBJECT_TYPE_TOKEN 4
#define OBJECT_TYPE_PROCESS 5
#define OBJECT_TYPE_THREAD 6
#define OBJECT_TYPE_EVENT 7
#define OBJECT_TYPE_8 8
#define OBJECT_TYPE_MUTANT 9
#define OBJECT_TYPE_SEMAPHORE 10
#define OBJECT_TYPE_TIMER 11
#define OBJECT_TYPE_12 12
#define OBJECT_TYPE_WINDOWSTATION 13
#define OBJECT_TYPE_DESKTOP 14
#define OBJECT_TYPE_SECTION 15
#define OBJECT_TYPE_KEY 16
#define OBJECT_TYPE_PORT 17
#define OBJECT_TYPE_18 18
#define OBJECT_TYPE_19 19
#define OBJECT_TYPE_20 20
#define OBJECT_TYPE_21 21
#define OBJECT_TYPE_IOCOMPLETION 22
#define OBJECT_TYPE_FILE 23
#endif
#endif /* ndef _INCLUDE_DDK_OBTYPES_H */
+176
View File
@@ -0,0 +1,176 @@
#ifndef __INCLUDE_DDK_PNPFUNCS_H
#define __INCLUDE_DDK_PNPFUNCS_H
#define IoInitializeRemoveLock(Lock, Tag, Maxmin, HighWater) \
IoInitializeRemoveLockEx(Lock, Tag, Maxmin, HighWater, sizeof(IO_REMOVE_LOCK))
VOID
STDCALL
IoInitializeRemoveLockEx(
IN PIO_REMOVE_LOCK Lock,
IN ULONG AllocateTag,
IN ULONG MaxLockedMinutes,
IN ULONG HighWatermark,
IN ULONG RemlockSize);
#define IoAcquireRemoveLock(RemoveLock, Tag) \
IoAcquireRemoveLockEx(RemoveLock, Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
NTSTATUS
STDCALL
IoAcquireRemoveLockEx(
IN PIO_REMOVE_LOCK RemoveLock,
IN OPTIONAL PVOID Tag,
IN LPCSTR File,
IN ULONG Line,
IN ULONG RemlockSize);
#define IoReleaseRemoveLock(RemoveLock, Tag) \
IoReleaseRemoveLockEx(RemoveLock, Tag, sizeof (IO_REMOVE_LOCK))
VOID
STDCALL
IoReleaseRemoveLockEx(
IN PIO_REMOVE_LOCK RemoveLock,
IN PVOID Tag,
IN ULONG RemlockSize);
#define IoReleaseRemoveLockAndWait(RemoveLock, Tag) \
IoReleaseRemoveLockAndWaitEx(RemoveLock, Tag, sizeof (IO_REMOVE_LOCK))
VOID
STDCALL
IoReleaseRemoveLockAndWaitEx(
IN PIO_REMOVE_LOCK RemoveLock,
IN PVOID Tag,
IN ULONG RemlockSize);
VOID
STDCALL
IoAdjustPagingPathCount(
IN PLONG Count,
IN BOOLEAN Increment);
NTSTATUS
STDCALL
IoGetDeviceInterfaceAlias(
IN PUNICODE_STRING SymbolicLinkName,
IN CONST GUID *AliasInterfaceClassGuid,
OUT PUNICODE_STRING AliasSymbolicLinkName);
NTSTATUS
STDCALL
IoGetDeviceInterfaces(
IN CONST GUID *InterfaceClassGuid,
IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
IN ULONG Flags,
OUT PWSTR *SymbolicLinkList);
NTSTATUS
STDCALL
IoGetDeviceProperty(
IN PDEVICE_OBJECT DeviceObject,
IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
IN ULONG BufferLength,
OUT PVOID PropertyBuffer,
OUT PULONG ResultLength);
VOID
STDCALL
IoInvalidateDeviceRelations(
IN PDEVICE_OBJECT DeviceObject,
IN DEVICE_RELATION_TYPE Type);
VOID
STDCALL
IoInvalidateDeviceState(
IN PDEVICE_OBJECT PhysicalDeviceObject);
NTSTATUS
STDCALL
IoOpenDeviceInterfaceRegistryKey(
IN PUNICODE_STRING SymbolicLinkName,
IN ACCESS_MASK DesiredAccess,
OUT PHANDLE DeviceInterfaceKey);
NTSTATUS
STDCALL
IoOpenDeviceRegistryKey(
IN PDEVICE_OBJECT DeviceObject,
IN ULONG DevInstKeyType,
IN ACCESS_MASK DesiredAccess,
OUT PHANDLE DevInstRegKey);
NTSTATUS
STDCALL
IoRegisterDeviceInterface(
IN PDEVICE_OBJECT PhysicalDeviceObject,
IN CONST GUID *InterfaceClassGuid,
IN PUNICODE_STRING ReferenceString OPTIONAL,
OUT PUNICODE_STRING SymbolicLinkName);
NTSTATUS
STDCALL
IoRegisterPlugPlayNotification(
IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
IN ULONG EventCategoryFlags,
IN PVOID EventCategoryData OPTIONAL,
IN PDRIVER_OBJECT DriverObject,
IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine,
IN PVOID Context,
OUT PVOID *NotificationEntry);
NTSTATUS
STDCALL
IoReportDetectedDevice(
IN PDRIVER_OBJECT DriverObject,
IN INTERFACE_TYPE LegacyBusType,
IN ULONG BusNumber,
IN ULONG SlotNumber,
IN PCM_RESOURCE_LIST ResourceList,
IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
IN BOOLEAN ResourceAssigned,
IN OUT PDEVICE_OBJECT *DeviceObject);
NTSTATUS
STDCALL
IoReportResourceForDetection(
IN PDRIVER_OBJECT DriverObject,
IN PCM_RESOURCE_LIST DriverList OPTIONAL,
IN ULONG DriverListSize OPTIONAL,
IN PDEVICE_OBJECT DeviceObject OPTIONAL,
IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
IN ULONG DeviceListSize OPTIONAL,
OUT PBOOLEAN ConflictDetected);
NTSTATUS
STDCALL
IoReportTargetDeviceChange(
IN PDEVICE_OBJECT PhysicalDeviceObject,
IN PVOID NotificationStructure);
NTSTATUS
STDCALL
IoReportTargetDeviceChangeAsynchronous(
IN PDEVICE_OBJECT PhysicalDeviceObject,
IN PVOID NotificationStructure,
IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL,
IN PVOID Context OPTIONAL);
VOID
STDCALL
IoRequestDeviceEject(
IN PDEVICE_OBJECT PhysicalDeviceObject);
NTSTATUS
STDCALL
IoSetDeviceInterfaceState(
IN PUNICODE_STRING SymbolicLinkName,
IN BOOLEAN Enable);
NTSTATUS
STDCALL
IoUnregisterPlugPlayNotification(
IN PVOID NotificationEntry);
#endif /* __INCLUDE_DDK_PNPFUNCS_H */
+194
View File
@@ -0,0 +1,194 @@
#ifndef __INCLUDE_DDK_PNPTYPES_H
#define __INCLUDE_DDK_PNPTYPES_H
struct _DEVICE_OBJECT;
struct _FILE_OBJECT;
// windows.h may be included before
#ifndef GUID_DEFINED
#define GUID_DEFINED
typedef struct _GUID {
ULONG Data1;
USHORT Data2;
USHORT Data3;
UCHAR Data4[8];
} GUID, *LPGUID;
#endif
typedef struct _PNP_BUS_INFORMATION {
GUID BusTypeGuid;
INTERFACE_TYPE LegacyBusType;
ULONG BusNumber;
} PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
typedef struct _DEVICE_CAPABILITIES {
USHORT Size;
USHORT Version;
ULONG DeviceD1:1;
ULONG DeviceD2:1;
ULONG LockSupported:1;
ULONG EjectSupported:1;
ULONG Removable:1;
ULONG DockDevice:1;
ULONG UniqueID:1;
ULONG SilentInstall:1;
ULONG RawDeviceOK:1;
ULONG SurpriseRemovalOK:1;
ULONG WakeFromD0:1;
ULONG WakeFromD1:1;
ULONG WakeFromD2:1;
ULONG WakeFromD3:1;
ULONG HardwareDisabled:1;
ULONG NonDynamic:1;
ULONG WarmEjectSupported:1;
ULONG Reserved:15;
ULONG Address;
ULONG UINumber;
DEVICE_POWER_STATE DeviceState[PowerSystemMaximum];
SYSTEM_POWER_STATE SystemWake;
DEVICE_POWER_STATE DeviceWake;
ULONG D1Latency;
ULONG D2Latency;
ULONG D3Latency;
} DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
USHORT Version;
USHORT Size;
GUID Event;
//
// Event-specific data
//
GUID InterfaceClassGuid;
PUNICODE_STRING SymbolicLinkName;
} DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
typedef struct _HWPROFILE_CHANGE_NOTIFICATION {
USHORT Version;
USHORT Size;
GUID Event;
//
// (No event-specific data)
//
} HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION;
typedef struct _PLUGPLAY_NOTIFICATION_HEADER {
USHORT Version;
USHORT Size;
GUID Event;
} PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER;
typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE;
#define PNP_DEVICE_DISABLED 0x00000001
#define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
#define PNP_DEVICE_FAILED 0x00000004
#define PNP_DEVICE_REMOVED 0x00000008
#define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
#define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION {
USHORT Version;
USHORT Size;
GUID Event;
//
// Event-specific data
//
struct _FILE_OBJECT *FileObject;
LONG NameBufferOffset;
UCHAR CustomDataBuffer[1];
} TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION;
typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION {
USHORT Version;
USHORT Size;
GUID Event;
//
// Event-specific data
//
struct _FILE_OBJECT *FileObject;
} TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION;
// PnP Device Property for IoGetDeviceProperty
typedef enum {
DevicePropertyDeviceDescription,
DevicePropertyHardwareID,
DevicePropertyCompatibleIDs,
DevicePropertyBootConfiguration,
DevicePropertyBootConfigurationTranslated,
DevicePropertyClassName,
DevicePropertyClassGuid,
DevicePropertyDriverKeyName,
DevicePropertyManufacturer,
DevicePropertyFriendlyName,
DevicePropertyLocationInformation,
DevicePropertyPhysicalDeviceObjectName,
DevicePropertyBusTypeGuid,
DevicePropertyLegacyBusType,
DevicePropertyBusNumber,
DevicePropertyEnumeratorName,
DevicePropertyAddress,
DevicePropertyUINumber
} DEVICE_REGISTRY_PROPERTY;
// DevInstKeyType values for IoOpenDeviceRegistryKey
#define PLUGPLAY_REGKEY_DEVICE 1
#define PLUGPLAY_REGKEY_DRIVER 2
#define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
// EventCategory for IoRegisterPlugPlayNotification
typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
EventCategoryReserved,
EventCategoryHardwareProfileChange,
EventCategoryDeviceInterfaceChange,
EventCategoryTargetDeviceChange
} IO_NOTIFICATION_EVENT_CATEGORY;
// CallbackRoutine for IoRegisterPlugPlayNotification
typedef NTSTATUS STDCALL
(*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE)(
IN PVOID NotificationStructure,
IN PVOID Context);
// Callback for IoReportTargetDeviceChangeAsynchronous
typedef VOID STDCALL
(*PDEVICE_CHANGE_COMPLETE_CALLBACK)(
IN PVOID Context);
// PNP/POWER values for IRP_MJ_PNP/IRP_MJ_POWER
typedef enum _DEVICE_RELATION_TYPE {
BusRelations,
EjectionRelations,
PowerRelations,
RemovalRelations,
TargetDeviceRelation
} DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
typedef struct _DEVICE_RELATIONS {
ULONG Count;
struct _DEVICE_OBJECT *Objects[1];
} DEVICE_RELATIONS, *PDEVICE_RELATIONS;
typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
DeviceUsageTypeUndefined,
DeviceUsageTypePaging,
DeviceUsageTypeHibernation,
DeviceUsageTypeDumpFile
} DEVICE_USAGE_NOTIFICATION_TYPE;
typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
BOOLEAN Removed;
BOOLEAN Reserved[3];
LONG IoCount;
KEVENT RemoveEvent;
} IO_REMOVE_LOCK_COMMON_BLOCK;
typedef struct _IO_REMOVE_LOCK {
IO_REMOVE_LOCK_COMMON_BLOCK Common;
} IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
#endif /* __INCLUDE_DDK_PNPTYPES_H */
+61
View File
@@ -0,0 +1,61 @@
#ifndef __INCLUDE_DDK_POFUNCS_H
#define __INCLUDE_DDK_POFUNCS_H
NTSTATUS
STDCALL
PoCallDriver(
IN PDEVICE_OBJECT DeviceObject,
IN OUT PIRP Irp);
PULONG
STDCALL
PoRegisterDeviceForIdleDetection(
IN PDEVICE_OBJECT DeviceObject,
IN ULONG ConservationIdleTime,
IN ULONG PerformanceIdleTime,
IN DEVICE_POWER_STATE State);
PVOID
STDCALL
PoRegisterSystemState(
IN PVOID StateHandle,
IN EXECUTION_STATE Flags);
NTSTATUS
STDCALL
PoRequestPowerIrp(
IN PDEVICE_OBJECT DeviceObject,
IN UCHAR MinorFunction,
IN POWER_STATE PowerState,
IN PREQUEST_POWER_COMPLETE CompletionFunction,
IN PVOID Context,
OUT PIRP *Irp OPTIONAL);
VOID
STDCALL
PoSetDeviceBusy(
PULONG IdlePointer);
POWER_STATE
STDCALL
PoSetPowerState(
IN PDEVICE_OBJECT DeviceObject,
IN POWER_STATE_TYPE Type,
IN POWER_STATE State);
VOID
STDCALL
PoSetSystemState(
IN EXECUTION_STATE Flags);
VOID
STDCALL
PoStartNextPowerIrp(
IN PIRP Irp);
VOID
STDCALL
PoUnregisterSystemState(
IN PVOID StateHandle);
#endif /* __INCLUDE_DDK_POFUNCS_H */
+101
View File
@@ -0,0 +1,101 @@
#ifndef __INCLUDE_DDK_POTYPES_H
#define __INCLUDE_DDK_POTYPES_H
struct _DEVICE_OBJECT;
struct _IO_STATUS_BLOCK;
// Flags for PoSetSystemState
typedef ULONG EXECUTION_STATE;
#define ES_SYSTEM_REQUIRED ((EXECUTION_STATE)0x00000001)
#define ES_DISPLAY_REQUIRED ((EXECUTION_STATE)0x00000002)
#define ES_USER_PRESENT ((EXECUTION_STATE)0x00000004)
#define ES_CONTINUOUS ((EXECUTION_STATE)0x80000000)
// PowerState for PoRequestPowerIrp
typedef enum _SYSTEM_POWER_STATE {
PowerSystemUnspecified = 0,
PowerSystemWorking,
PowerSystemSleeping1,
PowerSystemSleeping2,
PowerSystemSleeping3,
PowerSystemHibernate,
PowerSystemShutdown,
PowerSystemMaximum
} SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
// Values for IRP_MN_QUERY_POWER/IRP_MN_SET_POWER
typedef enum {
PowerActionNone = 0,
PowerActionReserved,
PowerActionSleep,
PowerActionHibernate,
PowerActionShutdown,
PowerActionShutdownReset,
PowerActionShutdownOff,
PowerActionWarmEject
} POWER_ACTION, *PPOWER_ACTION;
// State for PoRegisterDeviceForIdleDetection
typedef enum _DEVICE_POWER_STATE {
PowerDeviceUnspecified = 0,
PowerDeviceD0,
PowerDeviceD1,
PowerDeviceD2,
PowerDeviceD3,
PowerDeviceMaximum
} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
// State for PoSetPowerState
typedef union _POWER_STATE {
SYSTEM_POWER_STATE SystemState;
DEVICE_POWER_STATE DeviceState;
} POWER_STATE, *PPOWER_STATE;
// Type for PoSetPowerState
typedef enum _POWER_STATE_TYPE {
SystemPowerState = 0,
DevicePowerState
} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
// CompletionFunction for PoRequestPowerIrp
typedef VOID STDCALL
(*PREQUEST_POWER_COMPLETE) (
IN struct _DEVICE_OBJECT *DeviceObject,
IN UCHAR MinorFunction,
IN POWER_STATE PowerState,
IN PVOID Context,
IN struct _IO_STATUS_BLOCK *IoStatus);
typedef struct _POWER_SEQUENCE {
ULONG SequenceD1;
ULONG SequenceD2;
ULONG SequenceD3;
} POWER_SEQUENCE, *PPOWER_SEQUENCE;
typedef VOID STDCALL (*PINTERFACE_REFERENCE)(PVOID Context);
typedef VOID STDCALL (*PINTERFACE_DEREFERENCE)(PVOID Context);
typedef struct _INTERFACE {
USHORT Size;
USHORT Version;
PVOID Context;
PINTERFACE_REFERENCE InterfaceReference;
PINTERFACE_DEREFERENCE InterfaceDereference;
} INTERFACE, *PINTERFACE;
typedef enum {
BusQueryDeviceID = 0,
BusQueryHardwareIDs = 1,
BusQueryCompatibleIDs = 2,
BusQueryInstanceID = 3,
BusQueryDeviceSerialNumber = 4
} BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
typedef enum {
DeviceTextDescription = 0,
DeviceTextLocationInformation = 1
} DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
#endif /* __INCLUDE_DDK_POTYPES_H */
+98
View File
@@ -0,0 +1,98 @@
/* $Id: psfuncs.h,v 1.22 2002/09/08 10:47:45 chorns Exp $
*/
#ifndef _INCLUDE_DDK_PSFUNCS_H
#define _INCLUDE_DDK_PSFUNCS_H
NTSTATUS STDCALL PsAssignImpersonationToken (struct _ETHREAD* Thread,
HANDLE TokenHandle);
HANDLE STDCALL PsGetCurrentProcessId(VOID);
HANDLE STDCALL PsGetCurrentThreadId(VOID);
/*
* FUNCTION: Creates a thread which executes in kernel mode
* ARGUMENTS:
* ThreadHandle (OUT) = Caller supplied storage for the returned thread
* handle
* DesiredAccess = Requested access to the thread
* ObjectAttributes = Object attributes (optional)
* ProcessHandle = Handle of process thread will run in
* NULL to use system process
* ClientId (OUT) = Caller supplied storage for the returned client id
* of the thread (optional)
* StartRoutine = Entry point for the thread
* StartContext = Argument supplied to the thread when it begins
* execution
* RETURNS: Success or failure status
*/
NTSTATUS STDCALL PsCreateSystemThread(PHANDLE ThreadHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes,
HANDLE ProcessHandle,
PCLIENT_ID ClientId,
PKSTART_ROUTINE StartRoutine,
PVOID StartContext);
NTSTATUS STDCALL PsTerminateSystemThread(NTSTATUS ExitStatus);
NTSTATUS STDCALL PsCreateSystemProcess(PHANDLE ProcessHandle,
ACCESS_MASK DesiredAccess,
POBJECT_ATTRIBUTES ObjectAttributes);
NTSTATUS STDCALL PsCreateWin32Process(struct _EPROCESS* Process);
NTSTATUS STDCALL PsCreateWin32Thread(struct _ETHREAD* Thread);
VOID STDCALL PsEstablishWin32Callouts(PVOID Param1,
PVOID Param2,
PVOID Param3,
PVOID Param4,
ULONG W32ThreadSize,
ULONG W32ProcessSize);
struct _ETHREAD* STDCALL PsGetCurrentThread(VOID);
struct _EPROCESS* STDCALL PsGetCurrentProcess(VOID);
PACCESS_TOKEN STDCALL PsReferenceImpersonationToken(struct _ETHREAD* Thread,
PULONG Unknown1,
PULONG Unknown2,
SECURITY_IMPERSONATION_LEVEL*
Level);
PACCESS_TOKEN STDCALL PsReferencePrimaryToken(struct _EPROCESS* Process);
NTSTATUS STDCALL PsAssignImpersonationToken(struct _ETHREAD* Thread,
HANDLE TokenHandle);
VOID STDCALL PsImpersonateClient(struct _ETHREAD* Thread,
PACCESS_TOKEN Token,
UCHAR b,
UCHAR c,
SECURITY_IMPERSONATION_LEVEL Level);
VOID STDCALL PsRevertToSelf(VOID);
BOOLEAN STDCALL PsGetVersion (PULONG MajorVersion OPTIONAL,
PULONG MinorVersion OPTIONAL,
PULONG BuildNumber OPTIONAL,
PUNICODE_STRING CSDVersion OPTIONAL);
LARGE_INTEGER STDCALL PsGetProcessExitTime(VOID);
BOOLEAN STDCALL PsIsThreadTerminating(struct _ETHREAD* Thread);
NTSTATUS STDCALL PsLookupProcessByProcessId(IN PVOID ProcessId,
OUT PEPROCESS *Process);
NTSTATUS STDCALL PsLookupProcessThreadByCid(IN PCLIENT_ID Cid,
OUT PEPROCESS *Process OPTIONAL,
OUT struct _ETHREAD **Thread);
// OUT PETHREAD *Thread);
NTSTATUS STDCALL PsLookupThreadByThreadId(IN PVOID ThreadId,
OUT struct _ETHREAD **Thread);
// OUT PETHREAD *Thread);
NTSTATUS STDCALL
PsSetCreateProcessNotifyRoutine(IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
IN BOOLEAN Remove);
NTSTATUS STDCALL
PsSetCreateThreadNotifyRoutine(IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
#endif
/* EOF */
+57
View File
@@ -0,0 +1,57 @@
#ifndef __INCLUDE_DDK_PSTYPES_H
#define __INCLUDE_DDK_PSTYPES_H
#include <ntos/ps.h>
#include <ddk/i386/tss.h>
#include <napi/teb.h>
#ifndef TLS_MINIMUM_AVAILABLE
#define TLS_MINIMUM_AVAILABLE (64)
#endif
#ifndef MAX_PATH
#define MAX_PATH (260)
#endif
struct _EPROCESS;
struct _KPROCESS;
struct _ETHREAD;
struct _KTHREAD;
typedef NTSTATUS STDCALL (*PKSTART_ROUTINE)(PVOID StartContext);
typedef VOID STDCALL (*PCREATE_PROCESS_NOTIFY_ROUTINE)(HANDLE ParentId,
HANDLE ProcessId,
BOOLEAN Create);
typedef VOID STDCALL (*PCREATE_THREAD_NOTIFY_ROUTINE)(HANDLE ProcessId,
HANDLE ThreadId,
BOOLEAN Create);
typedef struct _STACK_INFORMATION
{
PVOID BaseAddress;
PVOID UpperAddress;
} STACK_INFORMATION, *PSTACK_INFORMATION;
typedef ULONG THREADINFOCLASS;
struct _KPROCESS;
#define LOW_PRIORITY (0)
#define LOW_REALTIME_PRIORITY (16)
#define HIGH_PRIORITY (31)
#define MAXIMUM_PRIORITY (32)
#ifdef __NTOSKRNL__
extern struct _EPROCESS* EXPORTED PsInitialSystemProcess;
extern POBJECT_TYPE EXPORTED PsProcessType;
extern POBJECT_TYPE EXPORTED PsThreadType;
#else
extern struct _EPROCESS* IMPORTED PsInitialSystemProcess;
extern POBJECT_TYPE IMPORTED PsProcessType;
extern POBJECT_TYPE IMPORTED PsThreadType;
#endif
#endif /* __INCLUDE_DDK_PSTYPES_H */
File diff suppressed because it is too large Load Diff
+214
View File
@@ -0,0 +1,214 @@
/* $Id: rtltypes.h,v 1.6 2002/09/08 10:47:45 chorns Exp $
*
*/
#ifndef __DDK_RTLTYPES_H
#define __DDK_RTLTYPES_H
#define COMPRESSION_FORMAT_NONE 0x0000
#define COMPRESSION_FORMAT_DEFAULT 0x0001
#define COMPRESSION_FORMAT_LZNT1 0x0002
#define COMPRESSION_ENGINE_STANDARD 0x0000
#define COMPRESSION_ENGINE_MAXIMUM 0x0100
#define COMPRESSION_ENGINE_HIBER 0x0200
typedef struct _INITIAL_TEB
{
ULONG StackCommit;
ULONG StackReserve;
PVOID StackBase;
PVOID StackLimit;
PVOID StackAllocate;
} INITIAL_TEB, *PINITIAL_TEB;
typedef struct _CONTROLLER_OBJECT
{
CSHORT Type;
CSHORT Size;
PVOID ControllerExtension;
KDEVICE_QUEUE DeviceWaitQueue;
ULONG Spare1;
LARGE_INTEGER Spare2;
} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
typedef struct _STRING
{
/*
* Length in bytes of the string stored in buffer
*/
USHORT Length;
/*
* Maximum length of the string
*/
USHORT MaximumLength;
/*
* String
*/
PCHAR Buffer;
} STRING, *PSTRING;
typedef STRING ANSI_STRING;
typedef PSTRING PANSI_STRING;
typedef STRING OEM_STRING;
typedef PSTRING POEM_STRING;
typedef struct _TIME_FIELDS
{
CSHORT Year;
CSHORT Month;
CSHORT Day;
CSHORT Hour;
CSHORT Minute;
CSHORT Second;
CSHORT Milliseconds;
CSHORT Weekday;
} TIME_FIELDS, *PTIME_FIELDS;
typedef struct _RTL_BITMAP
{
ULONG SizeOfBitMap;
PULONG Buffer;
} RTL_BITMAP, *PRTL_BITMAP;
typedef struct _RTL_HEAP_DEFINITION
{
ULONG Length;
ULONG Unknown[11];
} RTL_HEAP_DEFINITION, *PRTL_HEAP_DEFINITION;
typedef struct _RTL_ATOM_TABLE
{
ULONG TableSize;
ULONG NumberOfAtoms;
PVOID Lock; /* fast mutex (kernel mode)/ critical section (user mode) */
PVOID HandleTable;
LIST_ENTRY Slot[0];
} RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
typedef struct _LB_RANGE
{
UCHAR upper;
UCHAR lower;
} LB_RANGE;
typedef struct _RTL_NLS_DATA
{
USHORT CodePage;
USHORT MaxCharacterSize; // SBCS = 1, DBCS = 2
WCHAR DefaultCharacter;
WCHAR char1;
WCHAR char2;
WCHAR char3;
USHORT DbcsFlag;
LB_RANGE LeadByteRange[6];
USHORT reserved;
PWCHAR MultiByteToUnicode;
PCHAR UnicodeToMultiByte;
PWCHAR DosMultiByteToUnicode;
PCHAR DbcsTags;
} RTL_NLS_DATA, *PRTL_NLS_DATA;
typedef struct _RTL_NLS_TABLE
{
RTL_NLS_DATA OemInfo;
RTL_NLS_DATA AnsiInfo;
PWCHAR UpcaseTable;
PWCHAR DowncaseTable;
} RTL_NLS_TABLE, *PRTL_NLS_TABLE;
typedef struct _RTL_SPLAY_LINKS
{
struct _RTL_SPLAY_LINKS *Parent;
struct _RTL_SPLAY_LINKS *LeftChild;
struct _RTL_SPLAY_LINKS *RightChild;
} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
typedef struct _RTL_GENERIC_TABLE
{
PVOID RootElement;
ULONG Unknown2;
ULONG Unknown3;
ULONG Unknown4;
ULONG Unknown5;
ULONG ElementCount;
PVOID CompareRoutine;
PVOID AllocateRoutine;
PVOID FreeRoutine;
ULONG UserParameter;
} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
typedef struct _RTL_MESSAGE_RESOURCE_ENTRY
{
USHORT Length;
USHORT Flags;
UCHAR Text[1];
} RTL_MESSAGE_RESOURCE_ENTRY, *PRTL_MESSAGE_RESOURCE_ENTRY;
typedef struct _RTL_MESSAGE_RESOURCE_BLOCK
{
ULONG LowId;
ULONG HighId;
ULONG OffsetToEntries;
} RTL_MESSAGE_RESOURCE_BLOCK, *PRTL_MESSAGE_RESOURCE_BLOCK;
typedef struct _RTL_MESSAGE_RESOURCE_DATA
{
ULONG NumberOfBlocks;
RTL_MESSAGE_RESOURCE_BLOCK Blocks[1];
} RTL_MESSAGE_RESOURCE_DATA, *PRTL_MESSAGE_RESOURCE_DATA;
typedef NTSTATUS STDCALL
(*PRTL_QUERY_REGISTRY_ROUTINE)(PWSTR ValueName,
ULONG ValueType,
PVOID ValueData,
ULONG ValueLength,
PVOID Context,
PVOID EntryContext);
typedef struct _RTL_QUERY_REGISTRY_TABLE
{
PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
ULONG Flags;
PWSTR Name;
PVOID EntryContext;
ULONG DefaultType;
PVOID DefaultData;
ULONG DefaultLength;
} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
typedef struct _GENERATE_NAME_CONTEXT
{
USHORT Checksum;
BOOLEAN CheckSumInserted;
UCHAR NameLength;
WCHAR NameBuffer[8];
ULONG ExtensionLength;
WCHAR ExtensionBuffer[4];
ULONG LastIndexValue;
} GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
typedef struct _COMPRESSED_DATA_INFO
{
USHORT CompressionFormatAndEngine;
UCHAR CompressionUnitShift;
UCHAR ChunkShift;
UCHAR ClusterShift;
UCHAR Reserved;
USHORT NumberOfChunks;
ULONG CompressedChunkSizes[1];
} COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
#endif /* __DDK_RTLTYPES_H */
+152
View File
@@ -0,0 +1,152 @@
#ifndef _INCLUDE_DDK_SEFUNCS_H
#define _INCLUDE_DDK_SEFUNCS_H
/* $Id: sefuncs.h,v 1.19 2002/09/08 10:47:45 chorns Exp $ */
BOOLEAN STDCALL
SeAccessCheck(IN PSECURITY_DESCRIPTOR SecurityDescriptor,
IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
IN BOOLEAN SubjectContextLocked,
IN ACCESS_MASK DesiredAccess,
IN ACCESS_MASK PreviouslyGrantedAccess,
OUT PPRIVILEGE_SET* Privileges OPTIONAL,
IN PGENERIC_MAPPING GenericMapping,
IN KPROCESSOR_MODE AccessMode,
OUT PACCESS_MODE GrantedAccess,
OUT PNTSTATUS AccessStatus);
NTSTATUS STDCALL
SeAppendPrivileges(IN PACCESS_STATE AccessState,
IN PPRIVILEGE_SET Privileges);
NTSTATUS STDCALL
SeAssignSecurity(IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL,
IN PSECURITY_DESCRIPTOR ExplicitDescriptor,
OUT PSECURITY_DESCRIPTOR* NewDescriptor,
IN BOOLEAN IsDirectoryObject,
IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
IN PGENERIC_MAPPING GenericMapping,
IN POOL_TYPE PoolType);
BOOLEAN STDCALL
SeAuditingFileEvents(IN BOOLEAN AccessGranted,
IN PSECURITY_DESCRIPTOR SecurityDescriptor);
BOOLEAN STDCALL
SeAuditingFileOrGlobalEvents(IN BOOLEAN AccessGranted,
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
VOID STDCALL
SeCaptureSubjectContext(OUT PSECURITY_SUBJECT_CONTEXT SubjectContext);
NTSTATUS STDCALL
SeCreateAccessState(OUT PACCESS_STATE AccessState,
IN PVOID AuxData,
IN ACCESS_MASK AccessMask,
IN PGENERIC_MAPPING Mapping);
NTSTATUS STDCALL
SeCreateClientSecurity(IN struct _ETHREAD *Thread,
IN PSECURITY_QUALITY_OF_SERVICE Qos,
IN BOOLEAN RemoteClient,
OUT PSECURITY_CLIENT_CONTEXT ClientContext);
NTSTATUS STDCALL
SeDeassignSecurity(IN OUT PSECURITY_DESCRIPTOR* SecurityDescriptor);
VOID STDCALL
SeDeleteAccessState(IN PACCESS_STATE AccessState);
VOID STDCALL
SeDeleteObjectAuditAlarm(IN PVOID Object,
IN HANDLE Handle);
VOID STDCALL
SeFreePrivileges(IN PPRIVILEGE_SET Privileges);
VOID STDCALL
SeImpersonateClient(IN PSECURITY_CLIENT_CONTEXT ClientContext,
IN struct _ETHREAD *ServerThread OPTIONAL);
VOID STDCALL
SeLockSubjectContext(IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
NTSTATUS STDCALL
SeMarkLogonSessionForTerminationNotification(IN PLUID LogonId);
VOID STDCALL
SeOpenObjectAuditAlarm(IN PUNICODE_STRING ObjectTypeName,
IN PVOID Object OPTIONAL,
IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
IN PACCESS_STATE AccessState,
IN BOOLEAN ObjectCreated,
IN BOOLEAN AccessGranted,
IN KPROCESSOR_MODE AccessMode,
OUT PBOOLEAN GenerateOnClose);
VOID STDCALL
SeOpenObjectForDeleteAuditAlarm(IN PUNICODE_STRING ObjectTypeName,
IN PVOID Object OPTIONAL,
IN PUNICODE_STRING AbsoluteObjectName OPTIONAL,
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
IN PACCESS_STATE AccessState,
IN BOOLEAN ObjectCreated,
IN BOOLEAN AccessGranted,
IN KPROCESSOR_MODE AccessMode,
OUT PBOOLEAN GenerateOnClose);
BOOLEAN STDCALL
SePrivilegeCheck(IN OUT PPRIVILEGE_SET RequiredPrivileges,
IN PSECURITY_SUBJECT_CONTEXT SubjectContext,
IN KPROCESSOR_MODE AccessMode);
NTSTATUS STDCALL
SeQueryAuthenticationIdToken(IN PACCESS_TOKEN Token,
OUT PLUID LogonId);
NTSTATUS STDCALL
SeQuerySecurityDescriptorInfo(IN PSECURITY_INFORMATION SecurityInformation,
OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
IN OUT PULONG Length,
IN PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor);
NTSTATUS STDCALL
SeRegisterLogonSessionTerminatedRoutine(IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
VOID STDCALL
SeReleaseSubjectContext(IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
VOID STDCALL
SeSetAccessStateGenericMapping(IN PACCESS_STATE AccessState,
IN PGENERIC_MAPPING GenericMapping);
NTSTATUS STDCALL
SeSetSecurityDescriptorInfo(IN PVOID Object OPTIONAL,
IN PSECURITY_INFORMATION SecurityInformation,
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
IN OUT PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,
IN POOL_TYPE PoolType,
IN PGENERIC_MAPPING GenericMapping);
BOOLEAN STDCALL
SeSinglePrivilegeCheck(IN LUID PrivilegeValue,
IN KPROCESSOR_MODE PreviousMode);
SECURITY_IMPERSONATION_LEVEL STDCALL
SeTokenImpersonationLevel(IN PACCESS_TOKEN Token);
TOKEN_TYPE STDCALL
SeTokenType(IN PACCESS_TOKEN Token);
VOID STDCALL
SeUnlockSubjectContext(IN PSECURITY_SUBJECT_CONTEXT SubjectContext);
NTSTATUS STDCALL
SeUnregisterLogonSessionTerminatedRoutine(IN PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine);
BOOLEAN STDCALL
SeValidSecurityDescriptor(IN ULONG Length,
IN PSECURITY_DESCRIPTOR SecurityDescriptor);
#endif /* ndef _INCLUDE_DDK_SEFUNCS_H */
+60
View File
@@ -0,0 +1,60 @@
#ifndef __INTERNAL_SERVICE_H
#define __INTERNAL_SERVICE_H
/* number of entries in the service descriptor tables */
#define SSDT_MAX_ENTRIES 4
#pragma pack(1)
// System Service Dispatch Table
typedef struct t_SSDT {
ULONG SysCallPtr;
} SSDT, *PSSDT;
// System Service Parameters Table
typedef struct t_SSPT {
unsigned int ParamBytes;
} SSPT, *PSSPT;
typedef struct t_KeServiceDescriptorTableEntry {
PSSDT SSDT;
PULONG ServiceCounterTable;
unsigned int NumberOfServices;
PSSPT SSPT;
} KE_SERVICE_DESCRIPTOR_TABLE_ENTRY, *PKE_SERVICE_DESCRIPTOR_TABLE_ENTRY;
#pragma pack()
/* --- NTOSKRNL.EXE --- */
#if defined(__NTOSKRNL__)
extern
KE_SERVICE_DESCRIPTOR_TABLE_ENTRY
KeServiceDescriptorTable[SSDT_MAX_ENTRIES] __declspec(dllexport);
#else
extern
KE_SERVICE_DESCRIPTOR_TABLE_ENTRY
KeServiceDescriptorTable[SSDT_MAX_ENTRIES] __declspec(dllimport);
#endif
extern
KE_SERVICE_DESCRIPTOR_TABLE_ENTRY
KeServiceDescriptorTableShadow[SSDT_MAX_ENTRIES];
BOOLEAN
STDCALL
KeAddSystemServiceTable (
PSSDT SSDT,
PULONG ServiceCounterTable,
ULONG NumberOfServices,
PSSPT SSPT,
ULONG TableIndex
);
#endif
+164
View File
@@ -0,0 +1,164 @@
/* $Id: setypes.h,v 1.9 2002/09/08 10:47:45 chorns Exp $
*
* COPYRIGHT: See COPYING in the top level directory for details
* PROJECT: ReactOS kernel
* FILE: include/ddk/setypes.h
* PURPOSE: Security manager types
* REVISION HISTORY:
* ??/??/??: Created with empty stubs by David Welch
* 29/08/98: ACCESS_TOKEN definition from Boudewijn Dekker
*/
#ifndef __INCLUDE_DDK_SETYPES_H
#define __INCLUDE_DDK_SETYPES_H
#include <ntos/security.h>
/* TOKEN_GROUPS structure */
#define SE_GROUP_MANDATORY (0x1L)
#define SE_GROUP_ENABLED_BY_DEFAULT (0x2L)
#define SE_GROUP_ENABLED (0x4L)
#define SE_GROUP_OWNER (0x8L)
#define SE_GROUP_LOGON_ID (0xc0000000L)
/* ACL Defines */
#define ACL_REVISION (2)
/* ACE_HEADER structure */
#define ACCESS_ALLOWED_ACE_TYPE (0x0)
#define ACCESS_DENIED_ACE_TYPE (0x1)
#define SYSTEM_AUDIT_ACE_TYPE (0x2)
#define SYSTEM_ALARM_ACE_TYPE (0x3)
/* ACE flags in the ACE_HEADER structure */
#define OBJECT_INHERIT_ACE (0x1)
#define CONTAINER_INHERIT_ACE (0x2)
#define NO_PROPAGATE_INHERIT_ACE (0x4)
#define INHERIT_ONLY_ACE (0x8)
#define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
#define FAILED_ACCESS_ACE_FLAG (0x80)
/* SECURITY_DESCRIPTOR_CONTROL */
#define SECURITY_DESCRIPTOR_REVISION (1)
#define SECURITY_DESCRIPTOR_MIN_LENGTH (20)
#define SE_OWNER_DEFAULTED (1)
#define SE_GROUP_DEFAULTED (2)
#define SE_DACL_PRESENT (4)
#define SE_DACL_DEFAULTED (8)
#define SE_SACL_PRESENT (16)
#define SE_SACL_DEFAULTED (32)
#define SE_SELF_RELATIVE (32768)
/* PRIVILEGE_SET */
#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x1L)
#define SE_PRIVILEGE_ENABLED (0x2L)
#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
#define PRIVILEGE_SET_ALL_NECESSARY (0x1)
typedef struct _ACCESS_TOKEN
{
TOKEN_SOURCE TokenSource; // 0x00
LUID TokenId; // 0x10
LUID AuthenticationId; // 0x18
LARGE_INTEGER ExpirationTime; // 0x20
LUID ModifiedId; // 0x28
ULONG UserAndGroupCount; // 0x30
ULONG PrivilegeCount; // 0x34
ULONG VariableLength; // 0x38
ULONG DynamicCharged; // 0x3C
ULONG DynamicAvailable; // 0x40
ULONG DefaultOwnerIndex; // 0x44
PSID_AND_ATTRIBUTES UserAndGroups; // 0x48
PSID PrimaryGroup; // 0x4C
PLUID_AND_ATTRIBUTES Privileges; // 0x50
ULONG Unknown1; // 0x54
PACL DefaultDacl; // 0x58
TOKEN_TYPE TokenType; // 0x5C
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; // 0x60
UCHAR TokenFlags; // 0x64
UCHAR TokenInUse; // 0x65
UCHAR Unused[2]; // 0x66
PVOID ProxyData; // 0x68
PVOID AuditData; // 0x6c
UCHAR VariablePart[0]; // 0x70
} ACCESS_TOKEN, *PACCESS_TOKEN;
typedef struct _SECURITY_SUBJECT_CONTEXT
{
PACCESS_TOKEN ClientToken; // 0x0
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; // 0x4
PACCESS_TOKEN PrimaryToken; // 0x8
PVOID ProcessAuditId; // 0xC
} SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
typedef struct _SECURITY_CLIENT_CONTEXT
{
SECURITY_QUALITY_OF_SERVICE SecurityQos; // 0x00
PACCESS_TOKEN Token; // 0x0C
BOOLEAN DirectlyAccessClientToken; // 0x10
BOOLEAN DirectAccessEffectiveOnly; // 0x11
BOOLEAN ServerIsRemote; // 0x12
TOKEN_CONTROL ClientTokenControl; // 0x14
} SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
typedef struct _SE_EXPORTS
{
/* Privilege values */
LUID SeCreateTokenPrivilege;
LUID SeAssignPrimaryTokenPrivilege;
LUID SeLockMemoryPrivilege;
LUID SeIncreaseQuotaPrivilege;
LUID SeUnsolicitedInputPrivilege;
LUID SeTcbPrivilege;
LUID SeSecurityPrivilege;
LUID SeTakeOwnershipPrivilege;
LUID SeLoadDriverPrivilege;
LUID SeCreatePagefilePrivilege;
LUID SeIncreaseBasePriorityPrivilege;
LUID SeSystemProfilePrivilege;
LUID SeSystemtimePrivilege;
LUID SeProfileSingleProcessPrivilege;
LUID SeCreatePermanentPrivilege;
LUID SeBackupPrivilege;
LUID SeRestorePrivilege;
LUID SeShutdownPrivilege;
LUID SeDebugPrivilege;
LUID SeAuditPrivilege;
LUID SeSystemEnvironmentPrivilege;
LUID SeChangeNotifyPrivilege;
LUID SeRemoteShutdownPrivilege;
/* Universally defined SIDs */
PSID SeNullSid;
PSID SeWorldSid;
PSID SeLocalSid;
PSID SeCreatorOwnerSid;
PSID SeCreatorGroupSid;
/* Nt defined SIDs */
PSID SeNtAuthoritySid;
PSID SeDialupSid;
PSID SeNetworkSid;
PSID SeBatchSid;
PSID SeInteractiveSid;
PSID SeLocalSystemSid;
PSID SeAliasAdminsSid;
PSID SeAliasUsersSid;
PSID SeAliasGuestsSid;
PSID SeAliasPowerUsersSid;
PSID SeAliasAccountOpsSid;
PSID SeAliasSystemOpsSid;
PSID SeAliasPrintOpsSid;
PSID SeAliasBackupOpsSid;
} SE_EXPORTS, *PSE_EXPORTS;
typedef NTSTATUS STDCALL
(*PSE_LOGON_SESSION_TERMINATED_ROUTINE)(IN PLUID LogonId);
#endif
/* EOF */
+711
View File
@@ -0,0 +1,711 @@
#ifndef __INCLUDE_DDK_STATUS_H
#define __INCLUDE_DDK_STATUS_H
#define NTSTAT_SEVERITY_SHIFT 30
#define NTSTAT_SEVERITY_MASK 0x00000003
#define NTSTAT_FACILITY_SHIFT 16
#define NTSTAT_FACILITY_MASK 0x00000FFF
#define NTSTAT_CUSTOMER_MASK 0x20000000
#define NT_SEVERITY(StatCode) (((StatCode) >> NTSTAT_SEVERITY_SHIFT) & NTSTAT_SEVERITY_MASK)
#define NT_FACILITY(StatCode) (((StatCode) >> NTSTAT_FACILITY_SHIFT) & NTSTAT_FACILITY_MASK)
#define NT_CUSTOMER(StatCode) ((StatCode) & NTSTAT_CUSTOMER_MASK)
#define NT_SUCCESS(StatCode) ((NTSTATUS)(StatCode) >= 0)
/*
* Possible status codes
* FIXME: These may not be the actual values used by NT
*/
#define STATUS_SUCCESS (0x00000000)
#ifndef STATUS_WAIT_0
#define STATUS_WAIT_0 (0x00000000)
#endif
#define STATUS_WAIT_63 (0x0000003F)
#define STATUS_ABANDONED (0x00000080)
#ifndef STATUS_ABANDONED_WAIT_0
#define STATUS_ABANDONED_WAIT_0 (0x00000080)
#endif
#define STATUS_ABANDONED_WAIT_63 (0x000000BF)
#ifndef STATUS_USER_APC
#define STATUS_USER_APC (0x000000C0)
#endif
#define STATUS_KERNEL_APC (0x00000100)
#define STATUS_ALERTED (0x00000101)
#ifndef STATUS_TIMEOUT
#define STATUS_TIMEOUT (0x00000102)
#endif
#ifndef STATUS_PENDING
#define STATUS_PENDING (0x00000103)
#endif
#define STATUS_REPARSE (0x00000104)
#define STATUS_MORE_ENTRIES (0x00000105)
#define STATUS_NOT_ALL_ASSIGNED (0x00000106)
#define STATUS_SOME_NOT_MAPPED (0x00000107)
#define STATUS_OPLOCK_BREAK_IN_PROCESS (0x00000108)
#define STATUS_VOLUME_MOUNTED (0x00000109)
#define STATUS_RXACT_COMMITTED (0x0000010A)
#define STATUS_NOTIFY_CLEANUP (0x0000010B)
#define STATUS_NOTIFY_ENUM_DIR (0x0000010C)
#define STATUS_NO_QUOTAS_NO_ACCOUNT (0x0000010D)
#define STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED (0x0000010E)
#define STATUS_OBJECT_EXISTS (0x40000000)
#define STATUS_THREAD_WAS_SUSPENDED (0x40000001)
#define STATUS_WORKING_SET_LIMIT_RANGE (0x40000002)
#define STATUS_IMAGE_NOT_AT_BASE (0x40000003)
#define STATUS_RXACT_STATE_CREATED (0x40000004)
#define STATUS_SEGMENT_NOTIFICATION (0x40000005)
#define STATUS_LOCAL_USER_SESSION_KEY (0x40000006)
#define STATUS_BAD_CURRENT_DIRECTORY (0x40000007)
#define STATUS_SERIAL_MORE_WRITES (0x40000008)
#define STATUS_REGISTRY_RECOVERED (0x40000009)
#define STATUS_FT_READ_RECOVERING_FROM_BACKUP (0x4000000A)
#define STATUS_FT_WRITE_RECOVERY (0x4000000B)
#define STATUS_SERIAL_COUNTER_TIMEOUT (0x4000000C)
#define STATUS_NULL_LM_PASSWORD (0x4000000D)
#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH (0x4000000E)
#define STATUS_RECEIVE_PARTIAL (0x4000000F)
#define STATUS_RECEIVE_EXPEDITED (0x40000010)
#define STATUS_RECEIVE_PARTIAL_EXPEDITED (0x40000011)
#define STATUS_EVENT_DONE (0x40000012)
#define STATUS_EVENT_PENDING (0x40000013)
#define STATUS_CHECKING_FILE_SYSTEM (0x40000014)
#define STATUS_FATAL_APP_EXIT (0x40000015)
#define STATUS_PREDEFINED_HANDLE (0x40000016)
#define STATUS_WAS_UNLOCKED (0x40000017)
#define STATUS_SERVICE_NOTIFICATION (0x40000018)
#define STATUS_WAS_LOCKED (0x40000019)
#define STATUS_LOG_HARD_ERROR (0x4000001A)
#define STATUS_ALREADY_WIN32 (0x4000001B)
#define STATUS_WX86_UNSIMULATE (0x4000001C)
#define STATUS_WX86_CONTINUE (0x4000001D)
#define STATUS_WX86_SINGLE_STEP (0x4000001E)
#define STATUS_WX86_BREAKPOINT (0x4000001F)
#define STATUS_WX86_EXCEPTION_CONTINUE (0x40000020)
#define STATUS_WX86_EXCEPTION_LASTCHANCE (0x40000021)
#define STATUS_WX86_EXCEPTION_CHAIN (0x40000022)
#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE (0x40000023)
#define STATUS_NO_YIELD_PERFORMED (0x40000024)
#define STATUS_TIMER_RESUME_IGNORED (0x40000025)
#define STATUS_ARBITRATION_UNHANDLED (0x40000026)
#define STATUS_CARDBUS_NOT_SUPPORTED (0x40000027)
#define STATUS_WX86_CREATEWX86TIB (0x40000028)
#define STATUS_GUARD_PAGE_VIOLATION (0x80000001)
#define STATUS_DATATYPE_MISALIGNMENT (0x80000002)
#define STATUS_BREAKPOINT (0x80000003)
#define STATUS_SINGLE_STEP (0x80000004)
#define STATUS_BUFFER_OVERFLOW (0x80000005)
#define STATUS_NO_MORE_FILES (0x80000006)
#define STATUS_WAKE_SYSTEM_DEBUGGER (0x80000007)
#define STATUS_HANDLES_CLOSED (0x8000000A)
#define STATUS_NO_INHERITANCE (0x8000000B)
#define STATUS_GUID_SUBSTITUTION_MADE (0x8000000C)
#define STATUS_PARTIAL_COPY (0x8000000D)
#define STATUS_DEVICE_PAPER_EMPTY (0x8000000E)
#define STATUS_DEVICE_POWERED_OFF (0x8000000F)
#define STATUS_DEVICE_OFF_LINE (0x80000010)
#define STATUS_DEVICE_BUSY (0x80000011)
#define STATUS_NO_MORE_EAS (0x80000012)
#define STATUS_INVALID_EA_NAME (0x80000013)
#define STATUS_EA_LIST_INCONSISTENT (0x80000014)
#define STATUS_INVALID_EA_FLAG (0x80000015)
#define STATUS_VERIFY_REQUIRED (0x80000016)
#define STATUS_EXTRANEOUS_INFORMATION (0x80000017)
#define STATUS_RXACT_COMMIT_NECESSARY (0x80000018)
#define STATUS_NO_MORE_ENTRIES (0x8000001A)
#define STATUS_FILEMARK_DETECTED (0x8000001B)
#define STATUS_MEDIA_CHANGED (0x8000001C)
#define STATUS_BUS_RESET (0x8000001D)
#define STATUS_END_OF_MEDIA (0x8000001E)
#define STATUS_BEGINNING_OF_MEDIA (0x8000001F)
#define STATUS_MEDIA_CHECK (0x80000020)
#define STATUS_SETMARK_DETECTED (0x80000021)
#define STATUS_NO_DATA_DETECTED (0x80000022)
#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES (0x80000023)
#define STATUS_SERVER_HAS_OPEN_HANDLES (0x80000024)
#define STATUS_ALREADY_DISCONNECTED (0x80000025)
#define STATUS_LONGJUMP (0x80000026)
#define STATUS_UNSUCCESSFUL (0xc0000001)
#define STATUS_NOT_IMPLEMENTED (0xc0000002)
#define STATUS_INVALID_INFO_CLASS (0xc0000003)
#define STATUS_INFO_LENGTH_MISMATCH (0xc0000004)
#define STATUS_ACCESS_VIOLATION (0xc0000005)
#define STATUS_IN_PAGE_ERROR (0xc0000006)
#define STATUS_PAGEFILE_QUOTA (0xc0000007)
#define STATUS_INVALID_HANDLE (0xc0000008)
#define STATUS_BAD_INITIAL_STACK (0xc0000009)
#define STATUS_BAD_INITIAL_PC (0xc000000a)
#define STATUS_INVALID_CID (0xc000000b)
#define STATUS_TIMER_NOT_CANCELED (0xc000000c)
#define STATUS_INVALID_PARAMETER (0xc000000d)
#define STATUS_NO_SUCH_DEVICE (0xc000000e)
#define STATUS_NO_SUCH_FILE (0xc000000f)
#define STATUS_INVALID_DEVICE_REQUEST (0xc0000010)
#define STATUS_END_OF_FILE (0xc0000011)
#define STATUS_WRONG_VOLUME (0xc0000012)
#define STATUS_NO_MEDIA_IN_DEVICE (0xc0000013)
#define STATUS_UNRECOGNIZED_MEDIA (0xc0000014)
#define STATUS_NONEXISTENT_SECTOR (0xc0000015)
#define STATUS_MORE_PROCESSING_REQUIRED (0xc0000016)
#define STATUS_NO_MEMORY (0xc0000017)
#define STATUS_CONFLICTING_ADDRESSES (0xc0000018)
#define STATUS_NOT_MAPPED_VIEW (0xc0000019)
#define STATUS_UNABLE_TO_FREE_VM (0xc000001a)
#define STATUS_UNABLE_TO_DELETE_SECTION (0xc000001b)
#define STATUS_INVALID_SYSTEM_SERVICE (0xc000001c)
#define STATUS_ILLEGAL_INSTRUCTION (0xc000001d)
#define STATUS_INVALID_LOCK_SEQUENCE (0xc000001e)
#define STATUS_INVALID_VIEW_SIZE (0xc000001f)
#define STATUS_INVALID_FILE_FOR_SECTION (0xc0000020)
#define STATUS_ALREADY_COMMITTED (0xc0000021)
#define STATUS_ACCESS_DENIED (0xc0000022)
#define STATUS_BUFFER_TOO_SMALL (0xc0000023)
#define STATUS_OBJECT_TYPE_MISMATCH (0xc0000024)
#define STATUS_NONCONTINUABLE_EXCEPTION (0xc0000025)
#define STATUS_INVALID_DISPOSITION (0xc0000026)
#define STATUS_UNWIND (0xc0000027)
#define STATUS_BAD_STACK (0xc0000028)
#define STATUS_INVALID_UNWIND_TARGET (0xc0000029)
#define STATUS_NOT_LOCKED (0xc000002a)
#define STATUS_PARITY_ERROR (0xc000002b)
#define STATUS_UNABLE_TO_DECOMMIT_VM (0xc000002c)
#define STATUS_NOT_COMMITTED (0xc000002d)
#define STATUS_INVALID_PORT_ATTRIBUTES (0xc000002e)
#define STATUS_PORT_MESSAGE_TOO_LONG (0xc000002f)
#define STATUS_INVALID_PARAMETER_MIX (0xc0000030)
#define STATUS_INVALID_QUOTA_LOWER (0xc0000031)
#define STATUS_DISK_CORRUPT_ERROR (0xc0000032)
#define STATUS_OBJECT_NAME_INVALID (0xc0000033)
#define STATUS_OBJECT_NAME_NOT_FOUND (0xc0000034)
#define STATUS_OBJECT_NAME_COLLISION (0xc0000035)
#define STATUS_PORT_DISCONNECTED (0xc0000037)
#define STATUS_DEVICE_ALREADY_ATTACHED (0xc0000038)
#define STATUS_OBJECT_PATH_INVALID (0xc0000039)
#define STATUS_OBJECT_PATH_NOT_FOUND (0xc000003a)
#define STATUS_PATH_SYNTAX_BAD (0xc000003b)
#define STATUS_DATA_OVERRUN (0xc000003c)
#define STATUS_DATA_LATE_ERROR (0xc000003d)
#define STATUS_DATA_ERROR (0xc000003e)
#define STATUS_CRC_ERROR (0xc000003f)
#define STATUS_SECTION_TOO_BIG (0xc0000040)
#define STATUS_PORT_CONNECTION_REFUSED (0xc0000041)
#define STATUS_INVALID_PORT_HANDLE (0xc0000042)
#define STATUS_SHARING_VIOLATION (0xc0000043)
#define STATUS_QUOTA_EXCEEDED (0xc0000044)
#define STATUS_INVALID_PAGE_PROTECTION (0xc0000045)
#define STATUS_MUTANT_NOT_OWNED (0xc0000046)
#define STATUS_SEMAPHORE_LIMIT_EXCEEDED (0xc0000047)
#define STATUS_PORT_ALREADY_SET (0xc0000048)
#define STATUS_SECTION_NOT_IMAGE (0xc0000049)
#define STATUS_SUSPEND_COUNT_EXCEEDED (0xc000004a)
#define STATUS_THREAD_IS_TERMINATING (0xc000004b)
#define STATUS_BAD_WORKING_SET_LIMIT (0xc000004c)
#define STATUS_INCOMPATIBLE_FILE_MAP (0xc000004d)
#define STATUS_SECTION_PROTECTION (0xc000004e)
#define STATUS_EAS_NOT_SUPPORTED (0xc000004f)
#define STATUS_EA_TOO_LARGE (0xc0000050)
#define STATUS_NONEXISTENT_EA_ENTRY (0xc0000051)
#define STATUS_NO_EAS_ON_FILE (0xc0000052)
#define STATUS_EA_CORRUPT_ERROR (0xc0000053)
#define STATUS_FILE_LOCK_CONFLICT (0xc0000054)
#define STATUS_LOCK_NOT_GRANTED (0xc0000055)
#define STATUS_DELETE_PENDING (0xc0000056)
#define STATUS_CTL_FILE_NOT_SUPPORTED (0xc0000057)
#define STATUS_UNKNOWN_REVISION (0xc0000058)
#define STATUS_REVISION_MISMATCH (0xc0000059)
#define STATUS_INVALID_OWNER (0xc000005a)
#define STATUS_INVALID_PRIMARY_GROUP (0xc000005b)
#define STATUS_NO_IMPERSONATION_TOKEN (0xc000005c)
#define STATUS_CANT_DISABLE_MANDATORY (0xc000005d)
#define STATUS_NO_LOGON_SERVERS (0xc000005e)
#define STATUS_NO_SUCH_LOGON_SESSION (0xc000005f)
#define STATUS_NO_SUCH_PRIVILEGE (0xc0000060)
#define STATUS_PRIVILEGE_NOT_HELD (0xc0000061)
#define STATUS_INVALID_ACCOUNT_NAME (0xc0000062)
#define STATUS_USER_EXISTS (0xc0000063)
#define STATUS_NO_SUCH_USER (0xc0000064)
#define STATUS_GROUP_EXISTS (0xc0000065)
#define STATUS_NO_SUCH_GROUP (0xc0000066)
#define STATUS_MEMBER_IN_GROUP (0xc0000067)
#define STATUS_MEMBER_NOT_IN_GROUP (0xc0000068)
#define STATUS_LAST_ADMIN (0xc0000069)
#define STATUS_WRONG_PASSWORD (0xc000006a)
#define STATUS_ILL_FORMED_PASSWORD (0xc000006b)
#define STATUS_PASSWORD_RESTRICTION (0xc000006c)
#define STATUS_LOGON_FAILURE (0xc000006d)
#define STATUS_ACCOUNT_RESTRICTION (0xc000006e)
#define STATUS_INVALID_LOGON_HOURS (0xc000006f)
#define STATUS_INVALID_WORKSTATION (0xc0000070)
#define STATUS_PASSWORD_EXPIRED (0xc0000071)
#define STATUS_ACCOUNT_DISABLED (0xc0000072)
#define STATUS_NONE_MAPPED (0xc0000073)
#define STATUS_TOO_MANY_LUIDS_REQUESTED (0xc0000074)
#define STATUS_LUIDS_EXHAUSTED (0xc0000075)
#define STATUS_INVALID_SUB_AUTHORITY (0xc0000076)
#define STATUS_INVALID_ACL (0xc0000077)
#define STATUS_INVALID_SID (0xc0000078)
#define STATUS_INVALID_SECURITY_DESCR (0xc0000079)
#define STATUS_PROCEDURE_NOT_FOUND (0xc000007a)
#define STATUS_INVALID_IMAGE_FORMAT (0xc000007b)
#define STATUS_NO_TOKEN (0xc000007c)
#define STATUS_BAD_INHERITANCE_ACL (0xc000007d)
#define STATUS_RANGE_NOT_LOCKED (0xc000007e)
#define STATUS_DISK_FULL (0xc000007f)
#define STATUS_SERVER_DISABLED (0xc0000080)
#define STATUS_SERVER_NOT_DISABLED (0xc0000081)
#define STATUS_TOO_MANY_GUIDS_REQUESTED (0xc0000082)
#define STATUS_GUIDS_EXHAUSTED (0xc0000083)
#define STATUS_INVALID_ID_AUTHORITY (0xc0000084)
#define STATUS_AGENTS_EXHAUSTED (0xc0000085)
#define STATUS_INVALID_VOLUME_LABEL (0xc0000086)
#define STATUS_SECTION_NOT_EXTENDED (0xc0000087)
#define STATUS_NOT_MAPPED_DATA (0xc0000088)
#define STATUS_RESOURCE_DATA_NOT_FOUND (0xc0000089)
#define STATUS_RESOURCE_TYPE_NOT_FOUND (0xc000008a)
#define STATUS_RESOURCE_NAME_NOT_FOUND (0xc000008b)
#define STATUS_ARRAY_BOUNDS_EXCEEDED (0xc000008c)
#define STATUS_FLOAT_DENORMAL_OPERAND (0xc000008d)
#define STATUS_FLOAT_DIVIDE_BY_ZERO (0xc000008e)
#define STATUS_FLOAT_INEXACT_RESULT (0xc000008f)
#define STATUS_FLOAT_INVALID_OPERATION (0xc0000090)
#define STATUS_FLOAT_OVERFLOW (0xc0000091)
#define STATUS_FLOAT_STACK_CHECK (0xc0000092)
#define STATUS_FLOAT_UNDERFLOW (0xc0000093)
#define STATUS_INTEGER_DIVIDE_BY_ZERO (0xc0000094)
#define STATUS_INTEGER_OVERFLOW (0xc0000095)
#define STATUS_PRIVILEGED_INSTRUCTION (0xc0000096)
#define STATUS_TOO_MANY_PAGING_FILES (0xc0000097)
#define STATUS_FILE_INVALID (0xc0000098)
#define STATUS_ALLOTTED_SPACE_EXCEEDED (0xc0000099)
#define STATUS_INSUFFICIENT_RESOURCES (0xc000009a)
#define STATUS_DFS_EXIT_PATH_FOUND (0xc000009b)
#define STATUS_DEVICE_DATA_ERROR (0xc000009c)
#define STATUS_DEVICE_NOT_CONNECTED (0xc000009d)
#define STATUS_DEVICE_POWER_FAILURE (0xc000009e)
#define STATUS_FREE_VM_NOT_AT_BASE (0xc000009f)
#define STATUS_MEMORY_NOT_ALLOCATED (0xc00000a0)
#define STATUS_WORKING_SET_QUOTA (0xc00000a1)
#define STATUS_MEDIA_WRITE_PROTECTED (0xc00000a2)
#define STATUS_DEVICE_NOT_READY (0xc00000a3)
#define STATUS_INVALID_GROUP_ATTRIBUTES (0xc00000a4)
#define STATUS_BAD_IMPERSONATION_LEVEL (0xc00000a5)
#define STATUS_CANT_OPEN_ANONYMOUS (0xc00000a6)
#define STATUS_BAD_VALIDATION_CLASS (0xc00000a7)
#define STATUS_BAD_TOKEN_TYPE (0xc00000a8)
#define STATUS_BAD_MASTER_BOOT_RECORD (0xc00000a9)
#define STATUS_INSTRUCTION_MISALIGNMENT (0xc00000aa)
#define STATUS_INSTANCE_NOT_AVAILABLE (0xc00000ab)
#define STATUS_PIPE_NOT_AVAILABLE (0xc00000ac)
#define STATUS_INVALID_PIPE_STATE (0xc00000ad)
#define STATUS_PIPE_BUSY (0xc00000ae)
#define STATUS_ILLEGAL_FUNCTION (0xc00000af)
#define STATUS_PIPE_DISCONNECTED (0xc00000b0)
#define STATUS_PIPE_CLOSING (0xc00000b1)
#define STATUS_PIPE_CONNECTED (0xc00000b2)
#define STATUS_PIPE_LISTENING (0xc00000b3)
#define STATUS_INVALID_READ_MODE (0xc00000b4)
#define STATUS_IO_TIMEOUT (0xc00000b5)
#define STATUS_FILE_FORCED_CLOSED (0xc00000b6)
#define STATUS_PROFILING_NOT_STARTED (0xc00000b7)
#define STATUS_PROFILING_NOT_STOPPED (0xc00000b8)
#define STATUS_COULD_NOT_INTERPRET (0xc00000b9)
#define STATUS_FILE_IS_A_DIRECTORY (0xc00000ba)
#define STATUS_NOT_SUPPORTED (0xc00000bb)
#define STATUS_REMOTE_NOT_LISTENING (0xc00000bc)
#define STATUS_DUPLICATE_NAME (0xc00000bd)
#define STATUS_BAD_NETWORK_PATH (0xc00000be)
#define STATUS_NETWORK_BUSY (0xc00000bf)
#define STATUS_DEVICE_DOES_NOT_EXIST (0xc00000c0)
#define STATUS_TOO_MANY_COMMANDS (0xc00000c1)
#define STATUS_ADAPTER_HARDWARE_ERROR (0xc00000c2)
#define STATUS_INVALID_NETWORK_RESPONSE (0xc00000c3)
#define STATUS_UNEXPECTED_NETWORK_ERROR (0xc00000c4)
#define STATUS_BAD_REMOTE_ADAPTER (0xc00000c5)
#define STATUS_PRINT_QUEUE_FULL (0xc00000c6)
#define STATUS_NO_SPOOL_SPACE (0xc00000c7)
#define STATUS_PRINT_CANCELLED (0xc00000c8)
#define STATUS_NETWORK_NAME_DELETED (0xc00000c9)
#define STATUS_NETWORK_ACCESS_DENIED (0xc00000ca)
#define STATUS_BAD_DEVICE_TYPE (0xc00000cb)
#define STATUS_BAD_NETWORK_NAME (0xc00000cc)
#define STATUS_TOO_MANY_NAMES (0xc00000cd)
#define STATUS_TOO_MANY_SESSIONS (0xc00000ce)
#define STATUS_SHARING_PAUSED (0xc00000cf)
#define STATUS_REQUEST_NOT_ACCEPTED (0xc00000d0)
#define STATUS_REDIRECTOR_PAUSED (0xc00000d1)
#define STATUS_NET_WRITE_FAULT (0xc00000d2)
#define STATUS_PROFILING_AT_LIMIT (0xc00000d3)
#define STATUS_NOT_SAME_DEVICE (0xc00000d4)
#define STATUS_FILE_RENAMED (0xc00000d5)
#define STATUS_VIRTUAL_CIRCUIT_CLOSED (0xc00000d6)
#define STATUS_NO_SECURITY_ON_OBJECT (0xc00000d7)
#define STATUS_CANT_WAIT (0xc00000d8)
#define STATUS_PIPE_EMPTY (0xc00000d9)
#define STATUS_CANT_ACCESS_DOMAIN_INFO (0xc00000da)
#define STATUS_CANT_TERMINATE_SELF (0xc00000db)
#define STATUS_INVALID_SERVER_STATE (0xc00000dc)
#define STATUS_INVALID_DOMAIN_STATE (0xc00000dd)
#define STATUS_INVALID_DOMAIN_ROLE (0xc00000de)
#define STATUS_NO_SUCH_DOMAIN (0xc00000df)
#define STATUS_DOMAIN_EXISTS (0xc00000e0)
#define STATUS_DOMAIN_LIMIT_EXCEEDED (0xc00000e1)
#define STATUS_OPLOCK_NOT_GRANTED (0xc00000e2)
#define STATUS_INVALID_OPLOCK_PROTOCOL (0xc00000e3)
#define STATUS_INTERNAL_DB_CORRUPTION (0xc00000e4)
#define STATUS_INTERNAL_ERROR (0xc00000e5)
#define STATUS_GENERIC_NOT_MAPPED (0xc00000e6)
#define STATUS_BAD_DESCRIPTOR_FORMAT (0xc00000e7)
#define STATUS_INVALID_USER_BUFFER (0xc00000e8)
#define STATUS_UNEXPECTED_IO_ERROR (0xc00000e9)
#define STATUS_UNEXPECTED_MM_CREATE_ERR (0xc00000ea)
#define STATUS_UNEXPECTED_MM_MAP_ERROR (0xc00000eb)
#define STATUS_UNEXPECTED_MM_EXTEND_ERR (0xc00000ec)
#define STATUS_NOT_LOGON_PROCESS (0xc00000ed)
#define STATUS_LOGON_SESSION_EXISTS (0xc00000ee)
#define STATUS_INVALID_PARAMETER_1 (0xc00000ef)
#define STATUS_INVALID_PARAMETER_2 (0xc00000f0)
#define STATUS_INVALID_PARAMETER_3 (0xc00000f1)
#define STATUS_INVALID_PARAMETER_4 (0xc00000f2)
#define STATUS_INVALID_PARAMETER_5 (0xc00000f3)
#define STATUS_INVALID_PARAMETER_6 (0xc00000f4)
#define STATUS_INVALID_PARAMETER_7 (0xc00000f5)
#define STATUS_INVALID_PARAMETER_8 (0xc00000f6)
#define STATUS_INVALID_PARAMETER_9 (0xc00000f7)
#define STATUS_INVALID_PARAMETER_10 (0xc00000f8)
#define STATUS_INVALID_PARAMETER_11 (0xc00000f9)
#define STATUS_INVALID_PARAMETER_12 (0xc00000fa)
#define STATUS_REDIRECTOR_NOT_STARTED (0xc00000fb)
#define STATUS_REDIRECTOR_STARTED (0xc00000fc)
#define STATUS_STACK_OVERFLOW (0xc00000fd)
#define STATUS_NO_SUCH_PACKAGE (0xc00000fe)
#define STATUS_BAD_FUNCTION_TABLE (0xc00000ff)
#define STATUS_VARIABLE_NOT_FOUND (0xc0000100)
#define STATUS_DIRECTORY_NOT_EMPTY (0xc0000101)
#define STATUS_FILE_CORRUPT_ERROR (0xc0000102)
#define STATUS_NOT_A_DIRECTORY (0xc0000103)
#define STATUS_BAD_LOGON_SESSION_STATE (0xc0000104)
#define STATUS_LOGON_SESSION_COLLISION (0xc0000105)
#define STATUS_NAME_TOO_LONG (0xc0000106)
#define STATUS_FILES_OPEN (0xc0000107)
#define STATUS_CONNECTION_IN_USE (0xc0000108)
#define STATUS_MESSAGE_NOT_FOUND (0xc0000109)
#define STATUS_PROCESS_IS_TERMINATING (0xc000010a)
#define STATUS_INVALID_LOGON_TYPE (0xc000010b)
#define STATUS_NO_GUID_TRANSLATION (0xc000010c)
#define STATUS_CANNOT_IMPERSONATE (0xc000010d)
#define STATUS_IMAGE_ALREADY_LOADED (0xc000010e)
#define STATUS_ABIOS_NOT_PRESENT (0xc000010f)
#define STATUS_ABIOS_LID_NOT_EXIST (0xc0000110)
#define STATUS_ABIOS_LID_ALREADY_OWNED (0xc0000111)
#define STATUS_ABIOS_NOT_LID_OWNER (0xc0000112)
#define STATUS_ABIOS_INVALID_COMMAND (0xc0000113)
#define STATUS_ABIOS_INVALID_LID (0xc0000114)
#define STATUS_ABIOS_SELECTOR_NOT_AVAILABLE (0xc0000115)
#define STATUS_ABIOS_INVALID_SELECTOR (0xc0000116)
#define STATUS_NO_LDT (0xc0000117)
#define STATUS_INVALID_LDT_SIZE (0xc0000118)
#define STATUS_INVALID_LDT_OFFSET (0xc0000119)
#define STATUS_INVALID_LDT_DESCRIPTOR (0xc000011a)
#define STATUS_INVALID_IMAGE_NE_FORMAT (0xc000011b)
#define STATUS_RXACT_INVALID_STATE (0xc000011c)
#define STATUS_RXACT_COMMIT_FAILURE (0xc000011d)
#define STATUS_MAPPED_FILE_SIZE_ZERO (0xc000011e)
#define STATUS_TOO_MANY_OPENED_FILES (0xc000011f)
#define STATUS_CANCELLED (0xc0000120)
#define STATUS_CANNOT_DELETE (0xc0000121)
#define STATUS_INVALID_COMPUTER_NAME (0xc0000122)
#define STATUS_FILE_DELETED (0xc0000123)
#define STATUS_SPECIAL_ACCOUNT (0xc0000124)
#define STATUS_SPECIAL_GROUP (0xc0000125)
#define STATUS_SPECIAL_USER (0xc0000126)
#define STATUS_MEMBERS_PRIMARY_GROUP (0xc0000127)
#define STATUS_FILE_CLOSED (0xc0000128)
#define STATUS_TOO_MANY_THREADS (0xc0000129)
#define STATUS_THREAD_NOT_IN_PROCESS (0xc000012a)
#define STATUS_TOKEN_ALREADY_IN_USE (0xc000012b)
#define STATUS_PAGEFILE_QUOTA_EXCEEDED (0xc000012c)
#define STATUS_COMMITMENT_LIMIT (0xc000012d)
#define STATUS_INVALID_IMAGE_LE_FORMAT (0xc000012e)
#define STATUS_INVALID_IMAGE_NOT_MZ (0xc000012f)
#define STATUS_INVALID_IMAGE_PROTECT (0xc0000130)
#define STATUS_INVALID_IMAGE_WIN_16 (0xc0000131)
#define STATUS_LOGON_SERVER_CONFLICT (0xc0000132)
#define STATUS_TIME_DIFFERENCE_AT_DC (0xc0000133)
#define STATUS_SYNCHRONIZATION_REQUIRED (0xc0000134)
#define STATUS_DLL_NOT_FOUND (0xc0000135)
#define STATUS_OPEN_FAILED (0xc0000136)
#define STATUS_IO_PRIVILEGE_FAILED (0xc0000137)
#define STATUS_ORDINAL_NOT_FOUND (0xc0000138)
#define STATUS_ENTRYPOINT_NOT_FOUND (0xc0000139)
#define STATUS_CONTROL_C_EXIT (0xc000013a)
#define STATUS_LOCAL_DISCONNECT (0xc000013b)
#define STATUS_REMOTE_DISCONNECT (0xc000013c)
#define STATUS_REMOTE_RESOURCES (0xc000013d)
#define STATUS_LINK_FAILED (0xc000013e)
#define STATUS_LINK_TIMEOUT (0xc000013f)
#define STATUS_INVALID_CONNECTION (0xc0000140)
#define STATUS_INVALID_ADDRESS (0xc0000141)
#define STATUS_DLL_INIT_FAILED (0xc0000142)
#define STATUS_MISSING_SYSTEMFILE (0xc0000143)
#define STATUS_UNHANDLED_EXCEPTION (0xc0000144)
#define STATUS_APP_INIT_FAILURE (0xc0000145)
#define STATUS_PAGEFILE_CREATE_FAILED (0xc0000146)
#define STATUS_NO_PAGEFILE (0xc0000147)
#define STATUS_INVALID_LEVEL (0xc0000148)
#define STATUS_WRONG_PASSWORD_CORE (0xc0000149)
#define STATUS_ILLEGAL_FLOAT_CONTEXT (0xc000014a)
#define STATUS_PIPE_BROKEN (0xc000014b)
#define STATUS_REGISTRY_CORRUPT (0xc000014c)
#define STATUS_REGISTRY_IO_FAILED (0xc000014d)
#define STATUS_NO_EVENT_PAIR (0xc000014e)
#define STATUS_UNRECOGNIZED_VOLUME (0xc000014f)
#define STATUS_SERIAL_NO_DEVICE_INITED (0xc0000150)
#define STATUS_NO_SUCH_ALIAS (0xc0000151)
#define STATUS_MEMBER_NOT_IN_ALIAS (0xc0000152)
#define STATUS_MEMBER_IN_ALIAS (0xc0000153)
#define STATUS_ALIAS_EXISTS (0xc0000154)
#define STATUS_LOGON_NOT_GRANTED (0xc0000155)
#define STATUS_TOO_MANY_SECRETS (0xc0000156)
#define STATUS_SECRET_TOO_LONG (0xc0000157)
#define STATUS_INTERNAL_DB_ERROR (0xc0000158)
#define STATUS_FULLSCREEN_MODE (0xc0000159)
#define STATUS_TOO_MANY_CONTEXT_IDS (0xc000015a)
#define STATUS_LOGON_TYPE_NOT_GRANTED (0xc000015b)
#define STATUS_NOT_REGISTRY_FILE (0xc000015c)
#define STATUS_NT_CROSS_ENCRYPTION_REQUIRED (0xc000015d)
#define STATUS_DOMAIN_CTRLR_CONFIG_ERROR (0xc000015e)
#define STATUS_FT_MISSING_MEMBER (0xc000015f)
#define STATUS_ILL_FORMED_SERVICE_ENTRY (0xc0000160)
#define STATUS_ILLEGAL_CHARACTER (0xc0000161)
#define STATUS_UNMAPPABLE_CHARACTER (0xc0000162)
#define STATUS_UNDEFINED_CHARACTER (0xc0000163)
#define STATUS_FLOPPY_VOLUME (0xc0000164)
#define STATUS_FLOPPY_ID_MARK_NOT_FOUND (0xc0000165)
#define STATUS_FLOPPY_WRONG_CYLINDER (0xc0000166)
#define STATUS_FLOPPY_UNKNOWN_ERROR (0xc0000167)
#define STATUS_FLOPPY_BAD_REGISTERS (0xc0000168)
#define STATUS_DISK_RECALIBRATE_FAILED (0xc0000169)
#define STATUS_DISK_OPERATION_FAILED (0xc000016a)
#define STATUS_DISK_RESET_FAILED (0xc000016b)
#define STATUS_SHARED_IRQ_BUSY (0xc000016c)
#define STATUS_FT_ORPHANING (0xc000016d)
#define STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT (0xc000016e)
#define STATUS_PARTITION_FAILURE (0xc0000172)
#define STATUS_INVALID_BLOCK_LENGTH (0xc0000173)
#define STATUS_DEVICE_NOT_PARTITIONED (0xc0000174)
#define STATUS_UNABLE_TO_LOCK_MEDIA (0xc0000175)
#define STATUS_UNABLE_TO_UNLOAD_MEDIA (0xc0000176)
#define STATUS_EOM_OVERFLOW (0xc0000177)
#define STATUS_NO_MEDIA (0xc0000178)
#define STATUS_NO_SUCH_MEMBER (0xc000017a)
#define STATUS_INVALID_MEMBER (0xc000017b)
#define STATUS_KEY_DELETED (0xc000017c)
#define STATUS_NO_LOG_SPACE (0xc000017d)
#define STATUS_TOO_MANY_SIDS (0xc000017e)
#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED (0xc000017f)
#define STATUS_KEY_HAS_CHILDREN (0xc0000180)
#define STATUS_CHILD_MUST_BE_VOLATILE (0xc0000181)
#define STATUS_DEVICE_CONFIGURATION_ERROR (0xc0000182)
#define STATUS_DRIVER_INTERNAL_ERROR (0xc0000183)
#define STATUS_INVALID_DEVICE_STATE (0xc0000184)
#define STATUS_IO_DEVICE_ERROR (0xc0000185)
#define STATUS_DEVICE_PROTOCOL_ERROR (0xc0000186)
#define STATUS_BACKUP_CONTROLLER (0xc0000187)
#define STATUS_LOG_FILE_FULL (0xc0000188)
#define STATUS_TOO_LATE (0xc0000189)
#define STATUS_NO_TRUST_LSA_SECRET (0xc000018a)
#define STATUS_NO_TRUST_SAM_ACCOUNT (0xc000018b)
#define STATUS_TRUSTED_DOMAIN_FAILURE (0xc000018c)
#define STATUS_TRUSTED_RELATIONSHIP_FAILURE (0xc000018d)
#define STATUS_EVENTLOG_FILE_CORRUPT (0xc000018e)
#define STATUS_EVENTLOG_CANT_START (0xc000018f)
#define STATUS_TRUST_FAILURE (0xc0000190)
#define STATUS_MUTANT_LIMIT_EXCEEDED (0xc0000191)
#define STATUS_NETLOGON_NOT_STARTED (0xc0000192)
#define STATUS_ACCOUNT_EXPIRED (0xc0000193)
#define STATUS_POSSIBLE_DEADLOCK (0xc0000194)
#define STATUS_NETWORK_CREDENTIAL_CONFLICT (0xc0000195)
#define STATUS_REMOTE_SESSION_LIMIT (0xc0000196)
#define STATUS_EVENTLOG_FILE_CHANGED (0xc0000197)
#define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT (0xc0000198)
#define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT (0xc0000199)
#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT (0xc000019a)
#define STATUS_DOMAIN_TRUST_INCONSISTENT (0xc000019b)
#define STATUS_FS_DRIVER_REQUIRED (0xc000019c)
#define STATUS_NO_USER_SESSION_KEY (0xc0000202)
#define STATUS_USER_SESSION_DELETED (0xc0000203)
#define STATUS_RESOURCE_LANG_NOT_FOUND (0xc0000204)
#define STATUS_INSUFF_SERVER_RESOURCES (0xc0000205)
#define STATUS_INVALID_BUFFER_SIZE (0xc0000206)
#define STATUS_INVALID_ADDRESS_COMPONENT (0xc0000207)
#define STATUS_INVALID_ADDRESS_WILDCARD (0xc0000208)
#define STATUS_TOO_MANY_ADDRESSES (0xc0000209)
#define STATUS_ADDRESS_ALREADY_EXISTS (0xc000020a)
#define STATUS_ADDRESS_CLOSED (0xc000020b)
#define STATUS_CONNECTION_DISCONNECTED (0xc000020c)
#define STATUS_CONNECTION_RESET (0xc000020d)
#define STATUS_TOO_MANY_NODES (0xc000020e)
#define STATUS_TRANSACTION_ABORTED (0xc000020f)
#define STATUS_TRANSACTION_TIMED_OUT (0xc0000210)
#define STATUS_TRANSACTION_NO_RELEASE (0xc0000211)
#define STATUS_TRANSACTION_NO_MATCH (0xc0000212)
#define STATUS_TRANSACTION_RESPONDED (0xc0000213)
#define STATUS_TRANSACTION_INVALID_ID (0xc0000214)
#define STATUS_TRANSACTION_INVALID_TYPE (0xc0000215)
#define STATUS_NOT_SERVER_SESSION (0xc0000216)
#define STATUS_NOT_CLIENT_SESSION (0xc0000217)
#define STATUS_CANNOT_LOAD_REGISTRY_FILE (0xc0000218)
#define STATUS_DEBUG_ATTACH_FAILED (0xc0000219)
#define STATUS_SYSTEM_PROCESS_TERMINATED (0xc000021a)
#define STATUS_DATA_NOT_ACCEPTED (0xc000021b)
#define STATUS_NO_BROWSER_SERVERS_FOUND (0xc000021c)
#define STATUS_VDM_HARD_ERROR (0xc000021d)
#define STATUS_DRIVER_CANCEL_TIMEOUT (0xc000021e)
#define STATUS_REPLY_MESSAGE_MISMATCH (0xc000021f)
#define STATUS_MAPPED_ALIGNMENT (0xc0000220)
#define STATUS_IMAGE_CHECKSUM_MISMATCH (0xc0000221)
#define STATUS_LOST_WRITEBEHIND_DATA (0xc0000222)
#define STATUS_CLIENT_SERVER_PARAMETERS_INVALID (0xc0000223)
#define STATUS_PASSWORD_MUST_CHANGE (0xc0000224)
#define STATUS_NOT_FOUND (0xc0000225)
#define STATUS_NOT_TINY_STREAM (0xc0000226)
#define STATUS_RECOVERY_FAILURE (0xc0000227)
#define STATUS_STACK_OVERFLOW_READ (0xc0000228)
#define STATUS_FAIL_CHECK (0xc0000229)
#define STATUS_DUPLICATE_OBJECTID (0xc000022a)
#define STATUS_OBJECTID_EXISTS (0xc000022b)
#define STATUS_CONVERT_TO_LARGE (0xc000022c)
#define STATUS_RETRY (0xc000022d)
#define STATUS_FOUND_OUT_OF_SCOPE (0xc000022e)
#define STATUS_ALLOCATE_BUCKET (0xc000022f)
#define STATUS_PROPSET_NOT_FOUND (0xc0000230)
#define STATUS_MARSHALL_OVERFLOW (0xc0000231)
#define STATUS_INVALID_VARIANT (0xc0000232)
#define STATUS_DOMAIN_CONTROLLER_NOT_FOUND (0xc0000233)
#define STATUS_ACCOUNT_LOCKED_OUT (0xc0000234)
#define STATUS_HANDLE_NOT_CLOSABLE (0xc0000235)
#define STATUS_CONNECTION_REFUSED (0xc0000236)
#define STATUS_GRACEFUL_DISCONNECT (0xc0000237)
#define STATUS_ADDRESS_ALREADY_ASSOCIATED (0xc0000238)
#define STATUS_ADDRESS_NOT_ASSOCIATED (0xc0000239)
#define STATUS_CONNECTION_INVALID (0xc000023a)
#define STATUS_CONNECTION_ACTIVE (0xc000023b)
#define STATUS_NETWORK_UNREACHABLE (0xc000023c)
#define STATUS_HOST_UNREACHABLE (0xc000023d)
#define STATUS_PROTOCOL_UNREACHABLE (0xc000023e)
#define STATUS_PORT_UNREACHABLE (0xc000023f)
#define STATUS_REQUEST_ABORTED (0xc0000240)
#define STATUS_CONNECTION_ABORTED (0xc0000241)
#define STATUS_BAD_COMPRESSION_BUFFER (0xc0000242)
#define STATUS_USER_MAPPED_FILE (0xc0000243)
#define STATUS_AUDIT_FAILED (0xc0000244)
#define STATUS_TIMER_RESOLUTION_NOT_SET (0xc0000245)
#define STATUS_CONNECTION_COUNT_LIMIT (0xc0000246)
#define STATUS_LOGIN_TIME_RESTRICTION (0xc0000247)
#define STATUS_LOGIN_WKSTA_RESTRICTION (0xc0000248)
#define STATUS_IMAGE_MP_UP_MISMATCH (0xc0000249)
#define STATUS_INSUFFICIENT_LOGON_INFO (0xc0000250)
#define STATUS_BAD_DLL_ENTRYPOINT (0xc0000251)
#define STATUS_BAD_SERVICE_ENTRYPOINT (0xc0000252)
#define STATUS_LPC_REPLY_LOST (0xc0000253)
#define STATUS_IP_ADDRESS_CONFLICT1 (0xc0000254)
#define STATUS_IP_ADDRESS_CONFLICT2 (0xc0000255)
#define STATUS_REGISTRY_QUOTA_LIMIT (0xc0000256)
#define STATUS_PATH_NOT_COVERED (0xc0000257)
#define STATUS_NO_CALLBACK_ACTIVE (0xc0000258)
#define STATUS_LICENSE_QUOTA_EXCEEDED (0xc0000259)
#define STATUS_PWD_TOO_SHORT (0xc000025a)
#define STATUS_PWD_TOO_RECENT (0xc000025b)
#define STATUS_PWD_HISTORY_CONFLICT (0xc000025c)
#define STATUS_PLUGPLAY_NO_DEVICE (0xc000025e)
#define STATUS_UNSUPPORTED_COMPRESSION (0xc000025f)
#define STATUS_INVALID_HW_PROFILE (0xc0000260)
#define STATUS_INVALID_PLUGPLAY_DEVICE_PATH (0xc0000261)
#define STATUS_DRIVER_ORDINAL_NOT_FOUND (0xc0000262)
#define STATUS_DRIVER_ENTRYPOINT_NOT_FOUND (0xc0000263)
#define STATUS_RESOURCE_NOT_OWNED (0xc0000264)
#define STATUS_TOO_MANY_LINKS (0xc0000265)
#define STATUS_QUOTA_LIST_INCONSISTENT (0xc0000266)
#define STATUS_FILE_IS_OFFLINE (0xc0000267)
#define STATUS_EVALUATION_EXPIRATION (0xc0000268)
#define STATUS_ILLEGAL_DLL_RELOCATION (0xc0000269)
#define STATUS_LICENSE_VIOLATION (0xc000026a)
#define STATUS_DLL_INIT_FAILED_LOGOFF (0xc000026b)
#define STATUS_DRIVER_UNABLE_TO_LOAD (0xc000026c)
#define STATUS_DFS_UNAVAILABLE (0xc000026d)
#define STATUS_VOLUME_DISMOUNTED (0xc000026e)
#define STATUS_WX86_INTERNAL_ERROR (0xc000026f)
#define STATUS_WX86_FLOAT_STACK_CHECK (0xc0000270)
#define STATUS_VALIDATE_CONTINUE (0xc0000271)
#define STATUS_NO_MATCH (0xc0000272)
#define STATUS_NO_MORE_MATCHES (0xc0000273)
#define STATUS_INVALID_VLM_OPERATION (0xc0000274)
#define STATUS_NOT_A_REPARSE_POINT (0xc0000275)
#define STATUS_IO_REPARSE_TAG_INVALID (0xc0000276)
#define STATUS_IO_REPARSE_TAG_MISMATCH (0xc0000277)
#define STATUS_IO_REPARSE_DATA_INVALID (0xc0000278)
#define STATUS_IO_REPARSE_TAG_NOT_HANDLED (0xc0000279)
#define STATUS_SAM_INIT_FAILURE (0xC00002CB)
#define RPC_NT_INVALID_STRING_BINDING (0xC0020001)
#define RPC_NT_WRONG_KIND_OF_BINDING (0xC0020002)
#define RPC_NT_INVALID_BINDING (0xC0020003)
#define RPC_NT_PROTSEQ_NOT_SUPPORTED (0xC0020004)
#define RPC_NT_INVALID_RPC_PROTSEQ (0xC0020005)
#define RPC_NT_INVALID_STRING_UUID (0xC0020006)
#define RPC_NT_INVALID_ENDPOINT_FORMAT (0xC0020007)
#define RPC_NT_INVALID_NET_ADDR (0xC0020008)
#define RPC_NT_NO_ENDPOINT_FOUND (0xC0020009)
#define RPC_NT_INVALID_TIMEOUT (0xC002000A)
#define RPC_NT_OBJECT_NOT_FOUND (0xC002000B)
#define RPC_NT_ALREADY_REGISTERED (0xC002000C)
#define RPC_NT_TYPE_ALREADY_REGISTERED (0xC002000D)
#define RPC_NT_ALREADY_LISTENING (0xC002000E)
#define RPC_NT_NO_PROTSEQS_REGISTERED (0xC002000F)
#define RPC_NT_NOT_LISTENING (0xC0020010)
#define RPC_NT_UNKNOWN_MGR_TYPE (0xC0020011)
#define RPC_NT_UNKNOWN_IF (0xC0020012)
#define RPC_NT_NO_BINDINGS (0xC0020013)
#define RPC_NT_NO_PROTSEQS (0xC0020014)
#define RPC_NT_CANT_CREATE_ENDPOINT (0xC0020015)
#define RPC_NT_OUT_OF_RESOURCES (0xC0020016)
#define RPC_NT_SERVER_UNAVAILABLE (0xC0020017)
#define RPC_NT_SERVER_TOO_BUSY (0xC0020018)
#define RPC_NT_INVALID_NETWORK_OPTIONS (0xC0020019)
#define RPC_NT_NO_CALL_ACTIVE (0xC002001A)
#define RPC_NT_CALL_FAILED (0xC002001B)
#define RPC_NT_CALL_FAILED_DNE (0xC002001C)
#define RPC_NT_PROTOCOL_ERROR (0xC002001D)
#define RPC_NT_SS_IN_NULL_CONTEXT (0xC0030004)
/* FIXME: Are these official values ?? */
#define STATUS_FS_QUERY_REQUIRED (0xC1000001)
#define STATUS_HANDLE_NOT_WAITABLE (0xC1000002)
#define STATUS_OBJECT_FILE_MISMATCH (0xC1000003)
#define STATUS_INVALID_PARAMETER_MAX (0xC1000004)
#define STATUS_CONFLICTING_ADDRESS (0xC1000005)
#define STATUS_NO_MEDIA_IN_DRIVE (0xC1000006)
#endif /* __INCLUDE_DDK_STATUS_H */
+10
View File
@@ -0,0 +1,10 @@
/* SYSTEM STRUCTURES ******************************************************/
#include <ddk/cfgtypes.h>
#include <ddk/ketypes.h>
#include <ddk/obtypes.h>
#include <ddk/mmtypes.h>
#include <ddk/iotypes.h>
#include <ddk/extypes.h>
#include <ddk/pstypes.h>
+32
View File
@@ -0,0 +1,32 @@
#ifndef __INCLUDE_DDK_TYPES_H
#define __INCLUDE_DDK_TYPES_H
// these should be moved to a file like ntdef.h
typedef ULONG KAFFINITY, *PKAFFINITY;
/*
* Various other types (all quite pointless)
*/
typedef CCHAR KPROCESSOR_MODE;
typedef UCHAR KIRQL;
typedef KIRQL* PKIRQL;
typedef ULONG IO_ALLOCATION_ACTION;
typedef ULONG POOL_TYPE;
typedef ULONG TIMER_TYPE;
typedef ULONG MM_SYSTEM_SIZE;
typedef ULONG LOCK_OPERATION;
typedef LARGE_INTEGER PHYSICAL_ADDRESS;
typedef PHYSICAL_ADDRESS* PPHYSICAL_ADDRESS;
#endif /* __INCLUDE_DDK_TYPES_H */
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+35
View File
@@ -0,0 +1,35 @@
#ifndef __INCLUDE_NAPI_CORE_H
#define __INCLUDE_NAPI_CORE_H
#include "../ntoskrnl/include/internal/ke.h"
#define MM_CORE_DUMP_HEADER_MAGIC (0xdeafbead)
#define MM_CORE_DUMP_HEADER_VERSION (0x1)
#define MM_CORE_DUMP_TYPE_MINIMAL (0x1)
#define MM_CORE_DUMP_TYPE_FULL (0x2)
typedef struct _MM_CORE_DUMP_HEADER
{
ULONG Magic;
ULONG Version;
ULONG Type;
KTRAP_FRAME TrapFrame;
ULONG BugCheckCode;
ULONG BugCheckParameters[4];
PVOID FaultingStackBase;
ULONG FaultingStackSize;
ULONG PhysicalMemorySize;
} MM_CORE_DUMP_HEADER, *PMM_CORE_DUMP_HEADER;
typedef struct _MM_DUMP_POINTERS
{
PVOID Context;
NTSTATUS (*DeviceInit)(PVOID Context);
NTSTATUS (*DeviceWrite)(PVOID Context, ULONG Block, PMDL Mdl);
NTSTATUS (*DeviceFinish)(PVOID Context);
} MM_DUMP_POINTERS, *PMM_DUMP_POINTERS;
#define FSCTL_GET_DUMP_BLOCK_MAP (('R' << 24) | 0xF1)
#define IOCTL_GET_DUMP_POINTERS (('R' << 24) | 0xF2)
#endif /* __INCLUDE_NAPI_CORE_H */
+63
View File
@@ -0,0 +1,63 @@
#ifndef __INCLUDE_NAPI_DBG_H
#define __INCLUDE_NAPI_DBG_H
#include <napi/lpc.h>
#define DBG_EVENT_EXCEPTION (1)
#define DBG_EVENT_CREATE_THREAD (2)
#define DBG_EVENT_CREATE_PROCESS (3)
#define DBG_EVENT_EXIT_THREAD (4)
#define DBG_EVENT_EXIT_PROCESS (5)
#define DBG_EVENT_LOAD_DLL (6)
#define DBG_EVENT_UNLOAD_DLL (7)
typedef struct _LPC_DBG_MESSAGE
{
LPC_MESSAGE_HEADER Header;
ULONG Type;
ULONG Status;
union
{
struct
{
EXCEPTION_RECORD ExceptionRecord;
ULONG FirstChance;
} Exception;
struct
{
ULONG Reserved;
PVOID StartAddress;
} CreateThread;
struct
{
ULONG Reserved;
HANDLE FileHandle;
PVOID Base;
ULONG PointerToSymbolTable;
ULONG NumberOfSymbols;
ULONG Reserved2;
PVOID EntryPoint;
} CreateProcess;
struct
{
ULONG ExitCode;
} ExitThread;
struct
{
ULONG ExitCode;
} ExitProcess;
struct
{
HANDLE FileHandle;
PVOID Base;
ULONG PointerToSymbolTable;
ULONG NumberOfSymbols;
} LoadDll;
struct
{
PVOID Base;
} UnloadDll;
} Data;
} LPC_DBG_MESSAGE, *PLPC_DBG_MESSAGE;
#endif /* __INCLUDE_NAPI_DBG_H */
+353
View File
@@ -0,0 +1,353 @@
#ifndef _ASM_SEGMENT_H
#define _ASM_SEGMENT_H
#define KERNEL_CS (0x8)
#define KERNEL_DS (0x10)
#define USER_CS (0x18 + 0x3)
#define USER_DS (0x20 + 0x3)
#define RESERVED_FOR_TSS (0x28)
#define PCR_SELECTOR (0x30)
#define TEB_SELECTOR (0x38 + 0x3)
//#define USER_CS (0x8+0x3)
//#define USER_DS (0x10+0x3)
//#define ZERO_DS 0x18
//#define KERNEL_CS 0x20
//#define KERNEL_DS 0x28
#ifndef __ASSEMBLY__
/*
* Uh, these should become the main single-value transfer routines..
* They automatically use the right size if we just have the right
* pointer type..
*/
#define put_user(x,ptr) __put_user((unsigned long)(x),(ptr),sizeof(*(ptr)))
#define get_user(ptr) ((__typeof__(*(ptr)))__get_user((ptr),sizeof(*(ptr))))
/*
* This is a silly but good way to make sure that
* the __put_user function is indeed always optimized,
* and that we use the correct sizes..
*/
extern int bad_user_access_length(void);
/*
* dummy pointer type structure.. gcc won't try to do something strange
* this way..
*/
struct __segment_dummy { unsigned long a[100]; };
#define __sd(x) ((struct __segment_dummy *) (x))
#define __const_sd(x) ((const struct __segment_dummy *) (x))
static inline void __put_user(unsigned long x, void * y, int size)
{
switch (size) {
case 1:
__asm__ ("movb %b1,%%fs:%0" \
:"=m" (*__sd(y)) \
:"iq" ((unsigned char) x), "m" (*__sd(y)));
break;
case 2:
__asm__ ("movw %w1,%%fs:%0" \
:"=m" (*__sd(y)) \
:"ir" ((unsigned short) x), "m" (*__sd(y)));
break;
case 4:
__asm__ ("movl %1,%%fs:%0" \
:"=m" (*__sd(y)) \
:"ir" (x), "m" (*__sd(y)));
break;
default:
bad_user_access_length();
}
}
static inline unsigned long __get_user(const void * y, int size)
{
unsigned long result;
switch (size) {
case 1:
__asm__ ("movb %%fs:%1,%b0" \
:"=q" (result) \
:"m" (*__const_sd(y)));
return (unsigned char) result;
case 2:
__asm__ ("movw %%fs:%1,%w0" \
:"=r" (result) \
:"m" (*__const_sd(y)));
return (unsigned short) result;
case 4:
__asm__ ("movl %%fs:%1,%0" \
:"=r" (result) \
:"m" (*__const_sd(y)));
return result;
default:
return bad_user_access_length();
}
}
static inline void __generic_memcpy_tofs(void * to, const void * from, unsigned long n)
{
__asm__ volatile
(" cld \
push %%es \
push %%fs \
cmpl $3,%0 \
pop %%es \
jbe 1f \
movl %%edi,%%ecx \
negl %%ecx \
andl $3,%%ecx \
subl %%ecx,%0 \
rep; movsb \
movl %0,%%ecx \
shrl $2,%%ecx \
rep; movsl \
andl $3,%0 \
1: movl %0,%%ecx \
rep; movsb \
pop %%es" \
:"=abd" (n) \
:"0" (n),"D" ((long) to),"S" ((long) from) \
:"cx","di","si");
}
static inline void __constant_memcpy_tofs(void * to, const void * from, unsigned long n)
{
switch (n) {
case 0:
return;
case 1:
__put_user(*(const char *) from, (char *) to, 1);
return;
case 2:
__put_user(*(const short *) from, (short *) to, 2);
return;
case 3:
__put_user(*(const short *) from, (short *) to, 2);
__put_user(*(2+(const char *) from), 2+(char *) to, 1);
return;
case 4:
__put_user(*(const int *) from, (int *) to, 4);
return;
case 8:
__put_user(*(const int *) from, (int *) to, 4);
__put_user(*(1+(const int *) from), 1+(int *) to, 4);
return;
case 12:
__put_user(*(const int *) from, (int *) to, 4);
__put_user(*(1+(const int *) from), 1+(int *) to, 4);
__put_user(*(2+(const int *) from), 2+(int *) to, 4);
return;
case 16:
__put_user(*(const int *) from, (int *) to, 4);
__put_user(*(1+(const int *) from), 1+(int *) to, 4);
__put_user(*(2+(const int *) from), 2+(int *) to, 4);
__put_user(*(3+(const int *) from), 3+(int *) to, 4);
return;
}
#define COMMON(x) \
__asm__("cld\n\t" \
"push %%es\n\t" \
"push %%fs\n\t" \
"pop %%es\n\t" \
"rep ; movsl\n\t" \
x \
"pop %%es" \
: /* no outputs */ \
:"c" (n/4),"D" ((long) to),"S" ((long) from) \
:"cx","di","si")
switch (n % 4) {
case 0:
COMMON("");
return;
case 1:
COMMON("movsb\n\t");
return;
case 2:
COMMON("movsw\n\t");
return;
case 3:
COMMON("movsw\n\tmovsb\n\t");
return;
}
#undef COMMON
}
static inline void __generic_memcpy_fromfs(void * to, const void * from, unsigned long n)
{
__asm__ volatile
(" cld \
cmpl $3,%0 \
jbe 1f \
movl %%edi,%%ecx \
negl %%ecx \
andl $3,%%ecx \
subl %%ecx,%0 \
fs; rep; movsb \
movl %0,%%ecx \
shrl $2,%%ecx \
fs; rep; movsl \
andl $3,%0 \
1: movl %0,%%ecx \
fs; rep; movsb"
:"=abd" (n)
:"0" (n),"D" ((long) to),"S" ((long) from)
:"cx","di","si", "memory");
}
static inline void __constant_memcpy_fromfs(void * to, const void * from, unsigned long n)
{
switch (n) {
case 0:
return;
case 1:
*(char *)to = __get_user((const char *) from, 1);
return;
case 2:
*(short *)to = __get_user((const short *) from, 2);
return;
case 3:
*(short *) to = __get_user((const short *) from, 2);
*((char *) to + 2) = __get_user(2+(const char *) from, 1);
return;
case 4:
*(int *) to = __get_user((const int *) from, 4);
return;
case 8:
*(int *) to = __get_user((const int *) from, 4);
*(1+(int *) to) = __get_user(1+(const int *) from, 4);
return;
case 12:
*(int *) to = __get_user((const int *) from, 4);
*(1+(int *) to) = __get_user(1+(const int *) from, 4);
*(2+(int *) to) = __get_user(2+(const int *) from, 4);
return;
case 16:
*(int *) to = __get_user((const int *) from, 4);
*(1+(int *) to) = __get_user(1+(const int *) from, 4);
*(2+(int *) to) = __get_user(2+(const int *) from, 4);
*(3+(int *) to) = __get_user(3+(const int *) from, 4);
return;
}
#define COMMON(x) \
__asm__("cld\n\t" \
"rep ; fs ; movsl\n\t" \
x \
: /* no outputs */ \
:"c" (n/4),"D" ((long) to),"S" ((long) from) \
:"cx","di","si","memory")
switch (n % 4) {
case 0:
COMMON("");
return;
case 1:
COMMON("fs ; movsb");
return;
case 2:
COMMON("fs ; movsw");
return;
case 3:
COMMON("fs ; movsw\n\tfs ; movsb");
return;
}
#undef COMMON
}
#define memcpy_fromfs(to, from, n) \
(__builtin_constant_p(n) ? \
__constant_memcpy_fromfs((to),(from),(n)) : \
__generic_memcpy_fromfs((to),(from),(n)))
#define memcpy_tofs(to, from, n) \
(__builtin_constant_p(n) ? \
__constant_memcpy_tofs((to),(from),(n)) : \
__generic_memcpy_tofs((to),(from),(n)))
/*
* These are deprecated..
*
* Use "put_user()" and "get_user()" with the proper pointer types instead.
*/
#define get_fs_byte(addr) __get_user((const unsigned char *)(addr),1)
#define get_fs_word(addr) __get_user((const unsigned short *)(addr),2)
#define get_fs_long(addr) __get_user((const unsigned int *)(addr),4)
#define put_fs_byte(x,addr) __put_user((x),(unsigned char *)(addr),1)
#define put_fs_word(x,addr) __put_user((x),(unsigned short *)(addr),2)
#define put_fs_long(x,addr) __put_user((x),(unsigned int *)(addr),4)
#ifdef WE_REALLY_WANT_TO_USE_A_BROKEN_INTERFACE
static inline unsigned short get_user_word(const short *addr)
{
return __get_user(addr, 2);
}
static inline unsigned char get_user_byte(const char * addr)
{
return __get_user(addr,1);
}
static inline unsigned long get_user_long(const int *addr)
{
return __get_user(addr, 4);
}
static inline void put_user_byte(char val,char *addr)
{
__put_user(val, addr, 1);
}
static inline void put_user_word(short val,short * addr)
{
__put_user(val, addr, 2);
}
static inline void put_user_long(unsigned long val,int * addr)
{
__put_user(val, addr, 4);
}
#endif
/*
* Someone who knows GNU asm better than I should double check the following.
* It seems to work, but I don't know if I'm doing something subtly wrong.
* --- TYT, 11/24/91
* [ nothing wrong here, Linus: I just changed the ax to be any reg ]
*/
static inline unsigned long get_fs(void)
{
unsigned long _v;
__asm__("mov %%fs,%w0":"=r" (_v):"0" (0));
return _v;
}
static inline unsigned long get_ds(void)
{
unsigned long _v;
__asm__("mov %%ds,%w0":"=r" (_v):"0" (0));
return _v;
}
static inline void set_fs(unsigned long val)
{
__asm__ __volatile__("mov %w0,%%fs": /* no output */ :"r" (val));
}
static inline void set_ds(unsigned long val)
{
__asm__ __volatile__("mov %w0,%%ds": /* no output */ :"r" (val));
}
#endif /* __ASSEMBLY__ */
#endif /* _ASM_SEGMENT_H */
+197
View File
@@ -0,0 +1,197 @@
#ifndef __INCLUDE_NAPI_LPC_H
#define __INCLUDE_NAPI_LPC_H
#include <ntos/security.h>
#define MAX_MESSAGE_DATA (0x130)
typedef enum
{
UNUSED_MSG_TYPE = 0x0, /* ReactOS */
LPC_NEW_MESSAGE = 0x0, /* NT */
LPC_REQUEST = 0x1,
LPC_REPLY = 0x2,
LPC_DATAGRAM = 0x3,
LPC_LOST_REPLY = 0x4,
LPC_PORT_CLOSED = 0x5,
LPC_CLIENT_DIED = 0x6,
LPC_EXCEPTION = 0x7,
LPC_DEBUG_EVENT = 0x8,
LPC_ERROR_EVENT = 0x9,
LPC_CONNECTION_REQUEST = 0xa,
LPC_CONNECTION_REFUSED = 0xb
} LPC_TYPE, *PLPC_TYPE;
typedef struct _LPC_SECTION_WRITE
{
ULONG Length;
HANDLE SectionHandle;
ULONG SectionOffset;
ULONG ViewSize;
PVOID ViewBase;
PVOID TargetViewBase;
} LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
typedef struct _LPC_SECTION_READ
{
ULONG Length;
ULONG ViewSize;
PVOID ViewBase;
} LPC_SECTION_READ, *PLPC_SECTION_READ;
typedef struct _LPC_MESSAGE_HEADER
{
USHORT DataSize;
USHORT MessageSize;
// LPC_TYPE MessageType;
USHORT MessageType;
USHORT VirtualRangesOffset;
CLIENT_ID Cid;
ULONG MessageId;
ULONG SharedSectionSize;
} LPC_MESSAGE_HEADER, *PLPC_MESSAGE_HEADER;
typedef struct _LPC_TERMINATION_MESSAGE
{
LPC_MESSAGE_HEADER Header;
TIME CreationTime;
} LPC_TERMINATION_MESSAGE, *PLPC_TERMINATION_MESSAGE;
typedef struct _LPC_DEBUG_MESSAGE
{
LPC_MESSAGE_HEADER Header;
ULONG EventCode;
ULONG Status;
union {
struct {
EXCEPTION_RECORD ExceptionRecord;
ULONG FirstChance;
} Exception;
struct {
ULONG Reserved;
PVOID StartAddress;
} CreateThread;
struct {
ULONG Reserved;
HANDLE FileHandle;
PVOID Base;
ULONG PointerToSymbolTable;
ULONG NumberOfSymbols;
ULONG Reserved2;
PVOID EntryPoint;
} CreateProcess;
struct {
ULONG ExitCode;
} ExitThread;
struct {
ULONG ExitCode;
} ExitProcess;
struct {
HANDLE FileHandle;
PVOID Base;
ULONG PointerToSymbolTable;
ULONG NumberOfSymbols;
} LoadDll;
struct {
PVOID Base;
} UnloadDll;
#ifdef ANONYMOUSUNIONS
};
#else
} u;
#endif
} LPC_DEBUG_MESSAGE, * PLPC_DEBUG_MESSAGE;
typedef LPC_MESSAGE_HEADER LPC_MESSAGE, *PLPC_MESSAGE;
typedef struct _LPC_MAX_MESSAGE
{
LPC_MESSAGE_HEADER Header;
BYTE Data[MAX_MESSAGE_DATA];
} LPC_MAX_MESSAGE, *PLPC_MAX_MESSAGE;
#define PORT_MESSAGE_TYPE(m) (LPC_TYPE)((m).Header.MessageType)
#ifndef __USE_NT_LPC__
NTSTATUS STDCALL NtAcceptConnectPort (PHANDLE PortHandle,
HANDLE NamedPortHandle,
PLPC_MESSAGE ServerReply,
BOOLEAN AcceptIt,
PLPC_SECTION_WRITE WriteMap,
PLPC_SECTION_READ ReadMap);
#else
NTSTATUS STDCALL NtAcceptConnectPort (PHANDLE PortHandle,
ULONG PortIdentifier,
PLPC_MESSAGE ServerReply,
BOOLEAN AcceptIt,
PLPC_SECTION_WRITE WriteMap,
PLPC_SECTION_READ ReadMap);
#endif /* ndef __USE_NT_LPC__ */
NTSTATUS STDCALL NtCompleteConnectPort (HANDLE PortHandle);
NTSTATUS STDCALL NtConnectPort(PHANDLE PortHandle,
PUNICODE_STRING PortName,
PSECURITY_QUALITY_OF_SERVICE SecurityQos,
PLPC_SECTION_WRITE SectionInfo,
PLPC_SECTION_READ MapInfo,
PULONG MaxMessageSize,
PVOID ConnectInfo,
PULONG ConnectInfoLength);
NTSTATUS STDCALL NtReplyWaitReplyPort (HANDLE PortHandle,
PLPC_MESSAGE ReplyMessage);
NTSTATUS STDCALL NtCreatePort(PHANDLE PortHandle,
POBJECT_ATTRIBUTES ObjectAttributes,
ULONG MaxConnectInfoLength,
ULONG MaxDataLength,
ULONG NPMessageQueueSize OPTIONAL);
NTSTATUS STDCALL NtCreateWaitablePort(PHANDLE PortHandle,
POBJECT_ATTRIBUTES ObjectAttributes,
ULONG MaxConnectInfoLength,
ULONG MaxDataLength,
ULONG NPMessageQueueSize OPTIONAL);
NTSTATUS STDCALL NtImpersonateClientOfPort (HANDLE PortHandle,
PLPC_MESSAGE ClientMessage);
NTSTATUS STDCALL NtListenPort (HANDLE PortHandle,
PLPC_MESSAGE LpcMessage);
NTSTATUS STDCALL NtQueryInformationPort (HANDLE PortHandle,
CINT PortInformationClass,
PVOID PortInformation,
ULONG PortInformationLength,
PULONG ReturnLength);
NTSTATUS STDCALL NtReplyPort (HANDLE PortHandle,
PLPC_MESSAGE LpcReply);
NTSTATUS STDCALL NtReplyWaitReceivePort (HANDLE PortHandle,
PULONG PortId,
PLPC_MESSAGE MessageReply,
PLPC_MESSAGE MessageRequest);
NTSTATUS STDCALL NtRequestPort (HANDLE PortHandle,
PLPC_MESSAGE LpcMessage);
NTSTATUS STDCALL NtRequestWaitReplyPort (HANDLE PortHandle,
PLPC_MESSAGE LpcReply,
PLPC_MESSAGE LpcRequest);
NTSTATUS STDCALL NtReadRequestData (HANDLE PortHandle,
PLPC_MESSAGE Message,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
PULONG ReturnLength);
NTSTATUS STDCALL NtWriteRequestData (HANDLE PortHandle,
PLPC_MESSAGE Message,
ULONG Index,
PVOID Buffer,
ULONG BufferLength,
PULONG ReturnLength);
#endif /* __INCLUDE_NAPI_LPC_H */
+196
View File
@@ -0,0 +1,196 @@
#ifndef __INCLUDE_NAPI_NPIPE_H
#define __INCLUDE_NAPI_NPIPE_H
#include <ddk/ntddk.h>
/*
* FUNCTION: ZwCreateNamedPipeFile creates named pipe
* ARGUMENTS:
* NamedPipeFileHandle (OUT) = Caller supplied storage for the
* resulting handle
* DesiredAccess = Specifies the type of access that the caller
* requires to the file boject
* ObjectAttributes = Points to a structure that specifies the
* object attributes.
* IoStatusBlock = Points to a variable that receives the final
* completion status and information
* ShareAccess = Specifies the limitations on sharing of the file.
* This parameter can be zero or any compatible
* combination of the following flags
* FILE_SHARE_READ
* FILE_SHARE_WRITE
* CreateDisposition = Specifies what to do depending on whether
* the file already exists. This must be one of
* the following values
* FILE_OPEN
* FILE_CREATE
* FILE_OPEN_IF
* CreateOptions = Specifies the options to be applied when
* creating or opening the file, as a compatible
* combination of the following flags
* FILE_WRITE_THROUGH
* FILE_SYNCHRONOUS_IO_ALERT
* FILE_SYNCHRONOUS_IO_NONALERT
* TypeMessage = Specifies whether the data written to the pipe is
* interpreted as a sequence of messages or as a
* stream of bytes
* ReadModeMessage = Specifies whether the data read from the pipe
* is interpreted as a sequence of messages or as
* a stream of bytes
* NonBlocking = Specifies whether non-blocking mode is enabled
* MaxInstances = Specifies the maximum number of instancs that can
* be created for this pipe
* InBufferSize = Specifies the number of bytes to reserve for the
* input buffer
* OutBufferSize = Specifies the number of bytes to reserve for the
* output buffer
* DefaultTimeout = Optionally points to a variable that specifies
* the default timeout value in units of
* 100-nanoseconds.
* REMARKS: This funciton maps to the win32 function CreateNamedPipe
* RETURNS:
* Status
*/
NTSTATUS STDCALL NtCreateNamedPipeFile(OUT PHANDLE NamedPipeFileHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG ShareAccess,
IN ULONG CreateDisposition,
IN ULONG CreateOptions,
IN BOOLEAN WriteModeMessage,
IN BOOLEAN ReadModeMessage,
IN BOOLEAN NonBlocking,
IN ULONG MaxInstances,
IN ULONG InBufferSize,
IN ULONG OutBufferSize,
IN PLARGE_INTEGER DefaultTimeOut);
NTSTATUS STDCALL ZwCreateNamedPipeFile(OUT PHANDLE NamedPipeFileHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes,
OUT PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG ShareAccess,
IN ULONG CreateDisposition,
IN ULONG CreateOptions,
IN BOOLEAN WriteModeMessage,
IN BOOLEAN ReadModeMessage,
IN BOOLEAN NonBlocking,
IN ULONG MaxInstances,
IN ULONG InBufferSize,
IN ULONG OutBufferSize,
IN PLARGE_INTEGER DefaultTimeOut);
#define FSCTL_PIPE_ASSIGN_EVENT \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_DISCONNECT \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_LISTEN \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_PEEK \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
#define FSCTL_PIPE_QUERY_EVENT \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_TRANSCEIVE \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
#define FSCTL_PIPE_WAIT \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_IMPERSONATE \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_SET_CLIENT_PROCESS \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_GET_STATE \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_SET_STATE \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_INTERNAL_READ \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
#define FSCTL_PIPE_INTERNAL_WRITE \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
#define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
#define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
typedef struct _NPFS_WAIT_PIPE
{
LARGE_INTEGER Timeout;
} NPFS_WAIT_PIPE, *PNPFS_WAIT_PIPE;
typedef struct _NPFS_LISTEN
{
} NPFS_LISTEN, *PNPFS_LISTEN;
typedef struct _NPFS_SET_STATE
{
BOOLEAN WriteModeMessage;
BOOLEAN ReadModeMessage;
BOOLEAN NonBlocking;
ULONG InBufferSize;
ULONG OutBufferSize;
LARGE_INTEGER Timeout;
} NPFS_SET_STATE, *PNPFS_SET_STATE;
typedef struct _NPFS_GET_STATE
{
BOOLEAN WriteModeMessage;
BOOLEAN ReadModeMessage;
BOOLEAN NonBlocking;
ULONG InBufferSize;
ULONG OutBufferSize;
LARGE_INTEGER Timeout;
} NPFS_GET_STATE, *PNPFS_GET_STATE;
typedef struct _FILE_PIPE_PEEK_BUFFER
{
ULONG NamedPipeState;
ULONG ReadDataAvailable;
ULONG NumberOfMessages;
ULONG MessageLength;
CHAR Data[1];
} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
#define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
#define FILE_PIPE_MESSAGE_TYPE 0x00000001
#define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
#define FILE_PIPE_MESSAGE_MODE 0x00000001
#define FILE_PIPE_QUEUE_OPERATION 0x00000000
#define FILE_PIPE_COMPLETE_OPERATION 0x00000001
#define FILE_PIPE_INBOUND 0x00000000
#define FILE_PIPE_OUTBOUND 0x00000001
#define FILE_PIPE_FULL_DUPLEX 0x00000002
#define FILE_PIPE_DISCONNECTED_STATE 0x00000001
#define FILE_PIPE_LISTENING_STATE 0x00000002
#define FILE_PIPE_CONNECTED_STATE 0x00000003
#define FILE_PIPE_CLOSING_STATE 0x00000004
#define FILE_PIPE_CLIENT_END 0x00000000
#define FILE_PIPE_SERVER_END 0x00000001
#define FILE_PIPE_READ_DATA 0x00000000
#define FILE_PIPE_WRITE_SPACE 0x00000001
#endif /* __INCLUDE_NAPI_NPIPE_H */
+68
View File
@@ -0,0 +1,68 @@
#ifndef __INCLUDE_NAPI_SHARED_DATA_H
#define __INCLUDE_NAPI_SHARED_DATA_H
#define PROCESSOR_FEATURES_MAX 64
typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
{
StandardDesign,
NEC98x86,
EndAlternatives
} ALTERNATIVE_ARCHITECTURE_TYPE;
typedef struct _KUSER_SHARED_DATA
{
volatile ULONG TickCountLow;
ULONG TickCountMultiplier;
volatile KSYSTEM_TIME InterruptTime;
volatile KSYSTEM_TIME SystemTime;
volatile KSYSTEM_TIME TimeZoneBias;
USHORT ImageNumberLow;
USHORT ImageNumberHigh;
WCHAR NtSystemRoot[260];
ULONG DosDeviceMap;
ULONG CryptoExponent;
ULONG TimeZoneId;
UCHAR DosDeviceDriveType[32];
NT_PRODUCT_TYPE NtProductType;
BOOLEAN ProductTypeIsValid;
ULONG NtMajorVersion;
ULONG NtMinorVersion;
BOOLEAN ProcessorFeatures[PROCESSOR_FEATURES_MAX];
// NT5 / Win2k specific ??
ULONG Reserved1;
ULONG Reserved3;
volatile ULONG TimeSlip;
ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
ULONG SuiteMask;
#ifdef REMOTE_BOOT
ULONG SystemFlags;
UCHAR RemoteBootServerPath[260];
#endif
BOOLEAN KdDebuggerEnabled;
} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
/* Values for DosDeviceDriveType */
#define DOSDEVICE_DRIVE_UNKNOWN 0
#define DOSDEVICE_DRIVE_CALCULATE 1
#define DOSDEVICE_DRIVE_REMOVABLE 2
#define DOSDEVICE_DRIVE_FIXED 3
#define DOSDEVICE_DRIVE_REMOTE 4
#define DOSDEVICE_DRIVE_CDROM 5
#define DOSDEVICE_DRIVE_RAMDISK 6
#define KERNEL_SHARED_DATA (0xFFDF0000)
#define USER_SHARED_DATA (0x7FFE0000)
#if defined(__NTOSKRNL__) || defined(__NTDRIVER__) || defined(__NTHAL__)
#define KI_USER_SHARED_DATA (0xFFDF0000)
#define SharedUserData ((KUSER_SHARED_DATA * const)KI_USER_SHARED_DATA)
#else
#define SharedUserData ((KUSER_SHARED_DATA * const)USER_SHARED_DATA)
#endif
#endif /* __INCLUDE_NAPI_SHARED_DATA_H */
+234
View File
@@ -0,0 +1,234 @@
/* TEB/PEB parameters */
#ifndef __INCLUDE_INTERNAL_TEB
#define __INCLUDE_INTERNAL_TEB
#include <napi/types.h>
typedef struct _CLIENT_ID
{
HANDLE UniqueProcess;
HANDLE UniqueThread;
} CLIENT_ID, *PCLIENT_ID;
typedef struct _CURDIR
{
UNICODE_STRING DosPath;
PVOID Handle;
} CURDIR, *PCURDIR;
typedef struct RTL_DRIVE_LETTER_CURDIR
{
USHORT Flags;
USHORT Length;
ULONG TimeStamp;
UNICODE_STRING DosPath;
} RTL_DRIVE_LETTER_CURDIR, *PRTL_DRIVE_LETTER_CURDIR;
typedef struct _PEB_FREE_BLOCK
{
struct _PEB_FREE_BLOCK* Next;
ULONG Size;
} PEB_FREE_BLOCK, *PPEB_FREE_BLOCK;
/* RTL_USER_PROCESS_PARAMETERS.Flags */
#define PPF_NORMALIZED (1)
typedef struct _RTL_USER_PROCESS_PARAMETERS
{
ULONG MaximumLength; // 00h
ULONG Length; // 04h
ULONG Flags; // 08h
ULONG DebugFlags; // 0Ch
PVOID ConsoleHandle; // 10h
ULONG ConsoleFlags; // 14h
HANDLE InputHandle; // 18h
HANDLE OutputHandle; // 1Ch
HANDLE ErrorHandle; // 20h
CURDIR CurrentDirectory; // 24h
UNICODE_STRING DllPath; // 30h
UNICODE_STRING ImagePathName; // 38h
UNICODE_STRING CommandLine; // 40h
PWSTR Environment; // 48h
ULONG StartingX; // 4Ch
ULONG StartingY; // 50h
ULONG CountX; // 54h
ULONG CountY; // 58h
ULONG CountCharsX; // 5Ch
ULONG CountCharsY; // 60h
ULONG FillAttribute; // 64h
ULONG WindowFlags; // 68h
ULONG ShowWindowFlags; // 6Ch
UNICODE_STRING WindowTitle; // 70h
UNICODE_STRING DesktopInfo; // 78h
UNICODE_STRING ShellInfo; // 80h
UNICODE_STRING RuntimeInfo; // 88h
RTL_DRIVE_LETTER_CURDIR DLCurrentDirectory[0x20]; // 90h
} RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
#define PEB_BASE (0x7FFDF000)
typedef struct _PEB_LDR_DATA
{
ULONG Length;
BOOLEAN Initialized;
PVOID SsHandle;
LIST_ENTRY InLoadOrderModuleList;
LIST_ENTRY InMemoryOrderModuleList;
LIST_ENTRY InInitializationOrderModuleList;
} PEB_LDR_DATA, *PPEB_LDR_DATA;
typedef VOID STDCALL (*PPEBLOCKROUTINE)(PVOID);
typedef struct _PEB
{
UCHAR InheritedAddressSpace; // 00h
UCHAR ReadImageFileExecOptions; // 01h
UCHAR BeingDebugged; // 02h
UCHAR Spare; // 03h
PVOID Mutant; // 04h
PVOID ImageBaseAddress; // 08h
PPEB_LDR_DATA Ldr; // 0Ch
PRTL_USER_PROCESS_PARAMETERS ProcessParameters; // 10h
PVOID SubSystemData; // 14h
PVOID ProcessHeap; // 18h
PVOID FastPebLock; // 1Ch
PPEBLOCKROUTINE FastPebLockRoutine; // 20h
PPEBLOCKROUTINE FastPebUnlockRoutine; // 24h
ULONG EnvironmentUpdateCount; // 28h
PVOID* KernelCallbackTable; // 2Ch
PVOID EventLogSection; // 30h
PVOID EventLog; // 34h
PPEB_FREE_BLOCK FreeList; // 38h
ULONG TlsExpansionCounter; // 3Ch
PVOID TlsBitmap; // 40h
ULONG TlsBitmapBits[0x2]; // 44h
PVOID ReadOnlySharedMemoryBase; // 4Ch
PVOID ReadOnlySharedMemoryHeap; // 50h
PVOID* ReadOnlyStaticServerData; // 54h
PVOID AnsiCodePageData; // 58h
PVOID OemCodePageData; // 5Ch
PVOID UnicodeCaseTableData; // 60h
ULONG NumberOfProcessors; // 64h
ULONG NtGlobalFlag; // 68h
UCHAR Spare2[0x4]; // 6Ch
LARGE_INTEGER CriticalSectionTimeout; // 70h
ULONG HeapSegmentReserve; // 78h
ULONG HeapSegmentCommit; // 7Ch
ULONG HeapDeCommitTotalFreeThreshold; // 80h
ULONG HeapDeCommitFreeBlockThreshold; // 84h
ULONG NumberOfHeaps; // 88h
ULONG MaximumNumberOfHeaps; // 8Ch
PVOID** ProcessHeaps; // 90h
PVOID GdiSharedHandleTable; // 94h
PVOID ProcessStarterHelper; // 98h
PVOID GdiDCAttributeList; // 9Ch
PVOID LoaderLock; // A0h
ULONG OSMajorVersion; // A4h
ULONG OSMinorVersion; // A8h
ULONG OSBuildNumber; // ACh
ULONG OSPlatformId; // B0h
ULONG ImageSubSystem; // B4h
ULONG ImageSubSystemMajorVersion; // B8h
ULONG ImageSubSystemMinorVersion; // C0h
ULONG GdiHandleBuffer[0x22]; // C4h
} PEB, *PPEB;
typedef struct _NT_TIB {
struct _EXCEPTION_REGISTRATION_RECORD* ExceptionList; // 00h
PVOID StackBase; // 04h
PVOID StackLimit; // 08h
PVOID SubSystemTib; // 0Ch
union {
PVOID FiberData; // 10h
ULONG Version; // 10h
} Fib;
PVOID ArbitraryUserPointer; // 14h
struct _NT_TIB *Self; // 18h
} NT_TIB, *PNT_TIB;
typedef struct _GDI_TEB_BATCH
{
ULONG Offset;
ULONG HDC;
ULONG Buffer[0x136];
} GDI_TEB_BATCH, *PGDI_TEB_BATCH;
typedef struct _TEB
{
NT_TIB Tib; // 00h
PVOID EnvironmentPointer; // 1Ch
CLIENT_ID Cid; // 20h
PVOID ActiveRpcInfo; // 28h
PVOID ThreadLocalStoragePointer; // 2Ch
PPEB Peb; // 30h
ULONG LastErrorValue; // 34h
ULONG CountOfOwnedCriticalSections; // 38h
PVOID CsrClientThread; // 3Ch
struct _W32THREAD* Win32ThreadInfo; // 40h
ULONG Win32ClientInfo[0x1F]; // 44h
PVOID WOW32Reserved; // C0h
ULONG CurrentLocale; // C4h
ULONG FpSoftwareStatusRegister; // C8h
PVOID SystemReserved1[0x36]; // CCh
PVOID Spare1; // 1A4h
LONG ExceptionCode; // 1A8h
ULONG SpareBytes1[0x28]; // 1ACh
PVOID SystemReserved2[0xA]; // 1D4h
// GDI_TEB_BATCH GdiTebBatch; // 1FCh
ULONG gdiRgn; // 6DCh
ULONG gdiPen; // 6E0h
ULONG gdiBrush; // 6E4h
CLIENT_ID RealClientId; // 6E8h
PVOID GdiCachedProcessHandle; // 6F0h
ULONG GdiClientPID; // 6F4h
ULONG GdiClientTID; // 6F8h
PVOID GdiThreadLocaleInfo; // 6FCh
PVOID UserReserved[5]; // 700h
PVOID glDispatchTable[0x118]; // 714h
ULONG glReserved1[0x1A]; // B74h
PVOID glReserved2; // BDCh
PVOID glSectionInfo; // BE0h
PVOID glSection; // BE4h
PVOID glTable; // BE8h
PVOID glCurrentRC; // BECh
PVOID glContext; // BF0h
NTSTATUS LastStatusValue; // BF4h
UNICODE_STRING StaticUnicodeString; // BF8h
WCHAR StaticUnicodeBuffer[0x105]; // C00h
PVOID DeallocationStack; // E0Ch
PVOID TlsSlots[0x40]; // E10h
LIST_ENTRY TlsLinks; // F10h
PVOID Vdm; // F18h
PVOID ReservedForNtRpc; // F1Ch
PVOID DbgSsReserved[0x2]; // F20h
ULONG HardErrorDisabled; // F28h
PVOID Instrumentation[0x10]; // F2Ch
PVOID WinSockData; // F6Ch
ULONG GdiBatchCount; // F70h
ULONG Spare2; // F74h
ULONG Spare3; // F78h
ULONG Spare4; // F7Ch
PVOID ReservedForOle; // F80h
ULONG WaitingOnLoaderLock; // F84h
PVOID WineDebugInfo; // Needed for WINE DLL's
} TEB, *PTEB;
#define NtCurrentPeb() (NtCurrentTeb()->Peb)
static inline PTEB NtCurrentTeb(VOID)
{
int x;
__asm__ __volatile__("movl %%fs:0x18, %0\n\t"
: "=r" (x) /* can't have two memory operands */
: /* no inputs */
);
return((PTEB)x);
}
#endif /* __INCLUDE_INTERNAL_TEB */
+108
View File
@@ -0,0 +1,108 @@
#ifndef __INCLUDE_NAPI_TYPES_H
#define __INCLUDE_NAPI_TYPES_H
// these should be moved to a file like ntdef.h
typedef const int CINT;
typedef LONG NTSTATUS, *PNTSTATUS;
typedef ULONG DEVICE_TYPE;
enum
{
DIRECTORY_QUERY,
DIRECTORY_TRAVERSE,
DIRECTORY_CREATE_OBJECT,
DIRECTORY_CREATE_SUBDIRECTORY,
DIRECTORY_ALL_ACCESS,
};
/*
* General type for status information
*/
//typedef LONG NTSTATUS;
typedef struct _UNICODE_STRING
{
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;
typedef enum _SECTION_INHERIT {
ViewShare = 1,
ViewUnmap = 2
} SECTION_INHERIT;
typedef enum _NT_PRODUCT_TYPE
{
NtProductWinNt = 1,
NtProductLanManNt,
NtProductServer
} NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
/* File information for IRP_MJ_QUERY_INFORMATION (and SET) */
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,
FileCopyOnWriteInformation,
FileCompletionInformation,
FileMoveClusterInformation,
FileOleClassIdInformation,
FileOleStateBitsInformation,
FileNetworkOpenInformation,
FileObjectIdInformation,
FileOleAllInformation,
FileOleDirectoryInformation,
FileContentIndexInformation,
FileInheritContentIndexInformation,
FileOleInformation,
FileMaximumInformation,
} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
typedef ULONG WAIT_TYPE;
typedef USHORT CSHORT;
#if 0
typedef struct _TIME {
DWORD LowPart;
LONG HighPart;
} TIME, *PTIME;
#endif
typedef ULARGE_INTEGER TIME, *PTIME;
#endif /* __INCLUDE_NAPI_TYPES_H */
+24
View File
@@ -0,0 +1,24 @@
#ifndef __INCLUDE_NAPI_WIN32_H
#define __INCLUDE_NAPI_WIN32_H
typedef struct _W32THREAD
{
PVOID MessageQueue;
FAST_MUTEX WindowListLock;
LIST_ENTRY WindowListHead;
struct _DESKTOP_OBJECT* Desktop;
} __attribute__((packed)) W32THREAD, *PW32THREAD;
typedef struct _W32PROCESS
{
FAST_MUTEX ClassListLock;
LIST_ENTRY ClassListHead;
struct _WINSTATION_OBJECT* WindowStation;
} W32PROCESS, *PW32PROCESS;
PW32THREAD STDCALL
PsGetWin32Thread(VOID);
PW32PROCESS STDCALL
PsGetWin32Process(VOID);
#endif /* __INCLUDE_NAPI_WIN32_H */