/*
** Definitions specific to this Device Driver Kit
*/
-#define DDKAPI __attribute__((stdcall))
-#define DDKFASTAPI __attribute__((fastcall))
-#define DDKCDECLAPI __attribute__((cdecl))
+#define DDKAPI __stdcall
+#define DDKFASTAPI __fastcall
+#define DDKCDECLAPI __cdecl
+/* FIXME: REMOVE THIS UNCOMPATIBLE CRUFT!!! */
#if defined(_NTOSKRNL_)
#ifndef NTOSAPI
#define NTOSAPI DECL_EXPORT
# define _DDK_DUMMYUNION_N_MEMBER(n, name) name
#endif
+#if !defined(_NTSYSTEM_)
+#define NTSYSAPI DECLSPEC_IMPORT
+#define NTSYSCALLAPI DECLSPEC_IMPORT
+#else
+#define NTSYSAPI
+#if defined(_NTDLLBUILD_)
+#define NTSYSCALLAPI
+#else
+#define NTSYSCALLAPI DECLSPEC_ADDRSAFE
+#endif
+#endif
+
/*
** Forward declarations
*/
struct _IO_STATUS_BLOCK;
struct _DEVICE_DESCRIPTION;
struct _SCATTER_GATHER_LIST;
+struct _DRIVE_LAYOUT_INFORMATION;
+struct _DRIVE_LAYOUT_INFORMATION_EX;
DECLARE_INTERNAL_OBJECT(ADAPTER_OBJECT)
DECLARE_INTERNAL_OBJECT(DMA_ADAPTER)
VOID)
{
ULONG Value;
-
+#if defined(__GNUC__)
__asm__ __volatile__ ("movl %%fs:0x1C, %0\n\t"
: "=r" (Value)
: /* no inputs */
);
+#elif defined(_MSC_VER)
+ __asm mov eax, fs:[1Ch]
+ __asm mov [Value], eax
+#endif
return (struct _KPCR *) Value;
}
VOID)
{
ULONG Value;
-
+#if defined(__GNUC__)
__asm__ __volatile__ ("movl %%fs:0x20, %0\n\t"
: "=r" (Value)
: /* no inputs */
);
+#elif defined(_MSC_VER)
+ __asm mov eax, fs:[20h]
+ __asm mov [Value], eax
+#endif
return (struct _KPRCB *) Value;
}
typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE;
typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
typedef struct _BUS_HANDLER *PBUS_HANDLER;
+typedef struct _PEB *PPEB;
typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
/* Constants */
+#define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 )
+#define ZwCurrentProcess() NtCurrentProcess()
+#define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 )
+#define ZwCurrentThread() NtCurrentThread()
+
#define MAXIMUM_PROCESSORS 32
#define MAXIMUM_WAIT_OBJECTS 64
ULONG BaudClock;
} CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
+typedef struct _VM_COUNTERS
+{
+ SIZE_T PeakVirtualSize;
+ SIZE_T VirtualSize;
+ ULONG PageFaultCount;
+ SIZE_T PeakWorkingSetSize;
+ SIZE_T WorkingSetSize;
+ SIZE_T QuotaPeakPagedPoolUsage;
+ SIZE_T QuotaPagedPoolUsage;
+ SIZE_T QuotaPeakNonPagedPoolUsage;
+ SIZE_T QuotaNonPagedPoolUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PeakPagefileUsage;
+} VM_COUNTERS, *PVM_COUNTERS;
+
+typedef struct _VM_COUNTERS_EX
+{
+ SIZE_T PeakVirtualSize;
+ SIZE_T VirtualSize;
+ ULONG PageFaultCount;
+ SIZE_T PeakWorkingSetSize;
+ SIZE_T WorkingSetSize;
+ SIZE_T QuotaPeakPagedPoolUsage;
+ SIZE_T QuotaPagedPoolUsage;
+ SIZE_T QuotaPeakNonPagedPoolUsage;
+ SIZE_T QuotaNonPagedPoolUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PeakPagefileUsage;
+ SIZE_T PrivateUsage;
+} VM_COUNTERS_EX, *PVM_COUNTERS_EX;
+
+typedef struct _POOLED_USAGE_AND_LIMITS
+{
+ SIZE_T PeakPagedPoolUsage;
+ SIZE_T PagedPoolUsage;
+ SIZE_T PagedPoolLimit;
+ SIZE_T PeakNonPagedPoolUsage;
+ SIZE_T NonPagedPoolUsage;
+ SIZE_T NonPagedPoolLimit;
+ SIZE_T PeakPagefileUsage;
+ SIZE_T PagefileUsage;
+ SIZE_T PagefileLimit;
+} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
+
/* IO_RESOURCE_DESCRIPTOR.Option */
#define IO_RESOURCE_PREFERRED 0x01
#define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
#define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
#define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
+#define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
+#define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
+#define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
+#define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
+#define HalStartMirroring HALDISPATCH->HalStartMirroring
+#define HalEndMirroring HALDISPATCH->HalEndMirroring
+#define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
+#define HalEndOfBoot HALDISPATCH->HalEndOfBoot
+#define HalMirrorVerify HALDISPATCH->HalMirrorVerify
typedef enum _FILE_INFORMATION_CLASS {
FileDirectoryInformation = 1,
typedef struct _FILE_ALIGNMENT_INFORMATION {
ULONG AlignmentRequirement;
-} FILE_ALIGNMENT_INFORMATION;
+} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
typedef struct _FILE_NAME_INFORMATION {
ULONG FileNameLength;
BOOLEAN DeleteFile;
} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
+typedef struct _FILE_QUOTA_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG SidLength;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER QuotaUsed;
+ LARGE_INTEGER QuotaThreshold;
+ LARGE_INTEGER QuotaLimit;
+ SID Sid;
+} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
+
typedef struct _FILE_END_OF_FILE_INFORMATION {
LARGE_INTEGER EndOfFile;
} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
} INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
+#define SE_MIN_WELL_KNOWN_PRIVILEGE 2
+#define SE_CREATE_TOKEN_PRIVILEGE 2
+#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3
+#define SE_LOCK_MEMORY_PRIVILEGE 4
+#define SE_INCREASE_QUOTA_PRIVILEGE 5
+#define SE_UNSOLICITED_INPUT_PRIVILEGE 6
+#define SE_MACHINE_ACCOUNT_PRIVILEGE 6
+#define SE_TCB_PRIVILEGE 7
+#define SE_SECURITY_PRIVILEGE 8
+#define SE_TAKE_OWNERSHIP_PRIVILEGE 9
+#define SE_LOAD_DRIVER_PRIVILEGE 10
+#define SE_SYSTEM_PROFILE_PRIVILEGE 11
+#define SE_SYSTEMTIME_PRIVILEGE 12
+#define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13
+#define SE_INC_BASE_PRIORITY_PRIVILEGE 14
+#define SE_CREATE_PAGEFILE_PRIVILEGE 15
+#define SE_CREATE_PERMANENT_PRIVILEGE 16
+#define SE_BACKUP_PRIVILEGE 17
+#define SE_RESTORE_PRIVILEGE 18
+#define SE_SHUTDOWN_PRIVILEGE 19
+#define SE_DEBUG_PRIVILEGE 20
+#define SE_AUDIT_PRIVILEGE 21
+#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22
+#define SE_CHANGE_NOTIFY_PRIVILEGE 23
+#define SE_REMOTE_SHUTDOWN_PRIVILEGE 24
+#define SE_UNDOCK_PRIVILEGE 25
+#define SE_SYNC_AGENT_PRIVILEGE 26
+#define SE_ENABLE_DELEGATION_PRIVILEGE 27
+#define SE_MANAGE_VOLUME_PRIVILEGE 28
+#define SE_IMPERSONATE_PRIVILEGE 29
+#define SE_CREATE_GLOBAL_PRIVILEGE 30
+#define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE
+
typedef struct _SECURITY_SUBJECT_CONTEXT {
PACCESS_TOKEN ClientToken;
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
USHORT ShareAccess;
ULONG POINTER_ALIGNMENT EaLength;
} Create;
- /* FIXME: CreatePipe and CreateMailslot aren't defined in official
- * DDK/IFS headers. */
- struct {
- PIO_SECURITY_CONTEXT SecurityContext;
- ULONG Options;
- USHORT Reserved;
- USHORT ShareAccess;
- struct _NAMED_PIPE_CREATE_PARAMETERS *Parameters;
- } CreatePipe;
- struct {
- PIO_SECURITY_CONTEXT SecurityContext;
- ULONG Options;
- USHORT Reserved;
- USHORT ShareAccess;
- struct _MAILSLOT_CREATE_PARAMETERS *Parameters;
- } CreateMailslot;
struct {
ULONG Length;
ULONG POINTER_ALIGNMENT Key;
ProcessDebugObjectHandle,
ProcessDebugFlags,
ProcessHandleTracing,
- ProcessUnknown33,
- ProcessUnknown34,
- ProcessUnknown35,
- ProcessCookie,
MaxProcessInfoClass
} PROCESSINFOCLASS;
MaxThreadInfoClass
} THREADINFOCLASS;
+typedef struct _PROCESS_WS_WATCH_INFORMATION
+{
+ PVOID FaultingPc;
+ PVOID FaultingVa;
+} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
+
#define ES_SYSTEM_REQUIRED 0x00000001
#define ES_DISPLAY_REQUIRED 0x00000002
#define ES_USER_PRESENT 0x00000004
} DUMMYUNIONNAME;
} DISK_SIGNATURE, *PDISK_SIGNATURE;
-typedef VOID DDKFASTAPI
-(*PTIME_UPDATE_NOTIFY_ROUTINE)(
+typedef VOID
+(DDKFASTAPI*PTIME_UPDATE_NOTIFY_ROUTINE)(
IN HANDLE ThreadId,
IN KPROCESSOR_MODE Mode);
#define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
#define DRIVER_VERIFIER_IO_CHECKING 0x0010
-#define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
-#define RTL_RANGE_LIST_ADD_SHARED 0x00000002
-
-#define RTL_RANGE_LIST_SHARED_OK 0x00000001
-#define RTL_RANGE_LIST_NULL_CONFLICT_OK 0x00000002
-
-#define RTL_RANGE_LIST_MERGE_IF_CONFLICT RTL_RANGE_LIST_ADD_IF_CONFLICT
-
-typedef struct _RTL_RANGE {
- ULONGLONG Start;
- ULONGLONG End;
- PVOID UserData;
- PVOID Owner;
- UCHAR Attributes;
- UCHAR Flags;
-} RTL_RANGE, *PRTL_RANGE;
-
-#define RTL_RANGE_SHARED 0x01
-#define RTL_RANGE_CONFLICT 0x02
-
-typedef struct _RTL_RANGE_LIST {
- LIST_ENTRY ListHead;
- ULONG Flags;
- ULONG Count;
- ULONG Stamp;
-} RTL_RANGE_LIST, *PRTL_RANGE_LIST;
-
-typedef struct _RANGE_LIST_ITERATOR {
- PLIST_ENTRY RangeListHead;
- PLIST_ENTRY MergedHead;
- PVOID Current;
- ULONG Stamp;
-} RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
-
-typedef BOOLEAN
-(DDKAPI *PRTL_CONFLICT_RANGE_CALLBACK)(
- IN PVOID Context,
- IN PRTL_RANGE Range);
-
#define HASH_STRING_ALGORITHM_DEFAULT 0
#define HASH_STRING_ALGORITHM_X65599 1
#define HASH_STRING_ALGORITHM_INVALID 0xffffffff
* IN PCHAR Field);
*/
#ifndef CONTAINING_RECORD
-#define CONTAINING_RECORD(Address, Type, Field) \
- ((Type *) (((ULONG_PTR) Address) - FIELD_OFFSET(Type, Field)))
+#define CONTAINING_RECORD(address, type, field) \
+ ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
#endif
/* LONG
RtlAnsiStringToUnicodeSize(
IN PANSI_STRING AnsiString);
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlAddRange(
- IN OUT PRTL_RANGE_LIST RangeList,
- IN ULONGLONG Start,
- IN ULONGLONG End,
- IN UCHAR Attributes,
- IN ULONG Flags,
- IN PVOID UserData OPTIONAL,
- IN PVOID Owner OPTIONAL);
-
NTOSAPI
NTSTATUS
DDKAPI
IN CONST VOID UNALIGNED *Source,
IN ULONG Length);
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlCopyRangeList(
- OUT PRTL_RANGE_LIST CopyRangeList,
- IN PRTL_RANGE_LIST RangeList);
-
NTOSAPI
VOID
DDKAPI
IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor,
IN ULONG Revision);
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlDeleteOwnersRanges(
- IN OUT PRTL_RANGE_LIST RangeList,
- IN PVOID Owner);
-
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlDeleteRange(
- IN OUT PRTL_RANGE_LIST RangeList,
- IN ULONGLONG Start,
- IN ULONGLONG End,
- IN PVOID Owner);
-
NTOSAPI
NTSTATUS
DDKAPI
IN ULONG FromIndex,
OUT PULONG StartingRunIndex);
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlFindRange(
- IN PRTL_RANGE_LIST RangeList,
- IN ULONGLONG Minimum,
- IN ULONGLONG Maximum,
- IN ULONG Length,
- IN ULONG Alignment,
- IN ULONG Flags,
- IN UCHAR AttributeAvailableMask,
- IN PVOID Context OPTIONAL,
- IN PRTL_CONFLICT_RANGE_CALLBACK Callback OPTIONAL,
- OUT PULONGLONG Start);
-
NTOSAPI
ULONG
DDKAPI
RtlFreeAnsiString(
IN PANSI_STRING AnsiString);
-NTOSAPI
-VOID
-DDKAPI
-RtlFreeRangeList(
- IN PRTL_RANGE_LIST RangeList);
-
NTOSAPI
VOID
DDKAPI
RtlGetVersion(
IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlGetFirstRange(
- IN PRTL_RANGE_LIST RangeList,
- OUT PRTL_RANGE_LIST_ITERATOR Iterator,
- OUT PRTL_RANGE *Range);
-
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlGetNextRange(
- IN OUT PRTL_RANGE_LIST_ITERATOR Iterator,
- OUT PRTL_RANGE *Range,
- IN BOOLEAN MoveForwards);
-
-#define FOR_ALL_RANGES(RangeList, Iterator, Current) \
- for (RtlGetFirstRange((RangeList), (Iterator), &(Current)); \
- (Current) != NULL; \
- RtlGetNextRange((Iterator), &(Current), TRUE))
-
-#define FOR_ALL_RANGES_BACKWARDS(RangeList, Iterator, Current) \
- for (RtlGetLastRange((RangeList), (Iterator), &(Current)); \
- (Current) != NULL; \
- RtlGetNextRange((Iterator), &(Current), FALSE))
-
NTOSAPI
NTSTATUS
DDKAPI
IN PULONG BitMapBuffer,
IN ULONG SizeOfBitMap);
-NTOSAPI
-VOID
-DDKAPI
-RtlInitializeRangeList(
- IN OUT PRTL_RANGE_LIST RangeList);
-
NTOSAPI
VOID
DDKAPI
ULONG Base OPTIONAL,
PUNICODE_STRING String);
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlInvertRangeList(
- OUT PRTL_RANGE_LIST InvertedRangeList,
- IN PRTL_RANGE_LIST RangeList);
-
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlIsRangeAvailable(
- IN PRTL_RANGE_LIST RangeList,
- IN ULONGLONG Start,
- IN ULONGLONG End,
- IN ULONG Flags,
- IN UCHAR AttributeAvailableMask,
- IN PVOID Context OPTIONAL,
- IN PRTL_CONFLICT_RANGE_CALLBACK Callback OPTIONAL,
- OUT PBOOLEAN Available);
-
/*
* BOOLEAN
* RtlIsZeroLuid(
IN OUT PACCESS_MASK AccessMask,
IN PGENERIC_MAPPING GenericMapping);
-NTOSAPI
-NTSTATUS
-DDKAPI
-RtlMergeRangeLists(
- OUT PRTL_RANGE_LIST MergedRangeList,
- IN PRTL_RANGE_LIST RangeList1,
- IN PRTL_RANGE_LIST RangeList2,
- IN ULONG Flags);
-
/*
* VOID
* RtlMoveMemory(
IN PVOID Context,
IN PVOID Environment OPTIONAL);
-NTOSAPI
-VOID
-DDKAPI
-RtlRetrieveUlong(
- IN OUT PULONG DestinationAddress,
- IN PULONG SourceAddress);
+
+#define LONG_SIZE (sizeof(LONG))
+#define LONG_MASK (LONG_SIZE - 1)
+
+/*
+ * VOID
+ * RtlRetrieveUlong (
+ * PULONG DestinationAddress,
+ * PULONG SourceAddress
+ * );
+ */
+#define RtlRetrieveUlong(DestAddress,SrcAddress) \
+ if ((ULONG_PTR)(SrcAddress) & LONG_MASK) \
+ { \
+ ((PUCHAR)(DestAddress))[0]=((PUCHAR)(SrcAddress))[0]; \
+ ((PUCHAR)(DestAddress))[1]=((PUCHAR)(SrcAddress))[1]; \
+ ((PUCHAR)(DestAddress))[2]=((PUCHAR)(SrcAddress))[2]; \
+ ((PUCHAR)(DestAddress))[3]=((PUCHAR)(SrcAddress))[3]; \
+ } \
+ else \
+ { \
+ *((PULONG)(DestAddress))=*((PULONG)(SrcAddress)); \
+ }
NTOSAPI
VOID
BOOLEAN
DDKAPI
RtlValidRelativeSecurityDescriptor(
- IN PSECURITY_DESCRIPTOR_RELATIVE SecurityDescriptorInput,
+ IN PISECURITY_DESCRIPTOR_RELATIVE SecurityDescriptorInput,
IN ULONG SecurityDescriptorLength,
IN SECURITY_INFORMATION RequiredInformation);
VOID)
{
volatile LONG Barrier;
+#if defined(__GNUC__)
__asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax");
+#elif defined(_MSC_VER)
+ __asm xchg [Barrier], eax
+#endif
}
NTOSAPI
IN ...);
NTOSAPI
-NTSTATUS
+BOOLEAN
DDKAPI
DbgQueryDebugFilterState(
IN ULONG ComponentId,
IN ULONG Level,
IN BOOLEAN State);
-NTOSAPI
-BOOLEAN
-DDKAPI
-KeRosPrintAddress ( PVOID address );
-
-NTOSAPI
-VOID
-DDKAPI
-KeRosDumpStackFrames ( PULONG Frame, ULONG FrameCount );
-
#ifdef DBG
#define KdPrint(_x_) DbgPrint _x_