#include <guiddef.h>\r
#endif /* GUID_DEFINED */\r
\r
-#ifdef __GNUC__\r
#include "intrin.h"\r
-#endif\r
\r
#ifdef __cplusplus\r
extern "C" {\r
#endif\r
\r
-#ifdef _NTOSKRNL_\r
-/* HACKHACKHACK!!! We shouldn't include this header from ntoskrnl! */\r
-#define NTKERNELAPI\r
-#else\r
#define NTKERNELAPI DECLSPEC_IMPORT\r
+\r
+#ifdef _WIN64\r
+#define PORT_MAXIMUM_MESSAGE_LENGTH 512\r
+#else\r
+#define PORT_MAXIMUM_MESSAGE_LENGTH 256\r
#endif\r
\r
+\r
+#if defined(_MSC_VER)\r
+\r
+//\r
+// Indicate if #pragma alloc_text() is supported\r
+//\r
+#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64)\r
+#define ALLOC_PRAGMA 1\r
+#endif\r
+\r
+//\r
+// Indicate if #pragma data_seg() is supported\r
+//\r
+#if defined(_M_IX86) || defined(_M_AMD64)\r
+#define ALLOC_DATA_PRAGMA 1\r
+#endif\r
+\r
+#endif\r
+\r
+\r
/* Simple types */\r
typedef UCHAR KPROCESSOR_MODE;\r
typedef LONG KPRIORITY;\r
#define CmResourceTypePcCardConfig 130\r
#define CmResourceTypeMfCardConfig 131\r
\r
-\r
+typedef enum _INTERFACE_TYPE {\r
+ InterfaceTypeUndefined = -1,\r
+ Internal,\r
+ Isa,\r
+ Eisa,\r
+ MicroChannel,\r
+ TurboChannel,\r
+ PCIBus,\r
+ VMEBus,\r
+ NuBus,\r
+ PCMCIABus,\r
+ CBus,\r
+ MPIBus,\r
+ MPSABus,\r
+ ProcessorInternal,\r
+ InternalPowerBus,\r
+ PNPISABus,\r
+ PNPBus,\r
+ MaximumInterfaceType\r
+} INTERFACE_TYPE, *PINTERFACE_TYPE;\r
+\r
+/* IO_RESOURCE_DESCRIPTOR.Option */\r
+\r
+#define IO_RESOURCE_PREFERRED 0x01\r
+#define IO_RESOURCE_DEFAULT 0x02\r
+#define IO_RESOURCE_ALTERNATIVE 0x08\r
+\r
+typedef struct _IO_RESOURCE_DESCRIPTOR {\r
+ UCHAR Option;\r
+ UCHAR Type;\r
+ UCHAR ShareDisposition;\r
+ UCHAR Spare1;\r
+ USHORT Flags;\r
+ USHORT Spare2;\r
+ union {\r
+ struct {\r
+ ULONG Length;\r
+ ULONG Alignment;\r
+ PHYSICAL_ADDRESS MinimumAddress;\r
+ PHYSICAL_ADDRESS MaximumAddress;\r
+ } Port;\r
+ struct {\r
+ ULONG Length;\r
+ ULONG Alignment;\r
+ PHYSICAL_ADDRESS MinimumAddress;\r
+ PHYSICAL_ADDRESS MaximumAddress;\r
+ } Memory;\r
+ struct {\r
+ ULONG MinimumVector;\r
+ ULONG MaximumVector;\r
+ } Interrupt;\r
+ struct {\r
+ ULONG MinimumChannel;\r
+ ULONG MaximumChannel;\r
+ } Dma;\r
+ struct {\r
+ ULONG Length;\r
+ ULONG Alignment;\r
+ PHYSICAL_ADDRESS MinimumAddress;\r
+ PHYSICAL_ADDRESS MaximumAddress;\r
+ } Generic;\r
+ struct {\r
+ ULONG Data[3];\r
+ } DevicePrivate;\r
+ struct {\r
+ ULONG Length;\r
+ ULONG MinBusNumber;\r
+ ULONG MaxBusNumber;\r
+ ULONG Reserved;\r
+ } BusNumber;\r
+ struct {\r
+ ULONG Priority;\r
+ ULONG Reserved1;\r
+ ULONG Reserved2;\r
+ } ConfigData;\r
+ } u;\r
+} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;\r
+\r
+typedef struct _IO_RESOURCE_LIST {\r
+ USHORT Version;\r
+ USHORT Revision;\r
+ ULONG Count;\r
+ IO_RESOURCE_DESCRIPTOR Descriptors[1];\r
+} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;\r
+\r
+typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {\r
+ ULONG ListSize;\r
+ INTERFACE_TYPE InterfaceType;\r
+ ULONG BusNumber;\r
+ ULONG SlotNumber;\r
+ ULONG Reserved[3];\r
+ ULONG AlternativeLists;\r
+ IO_RESOURCE_LIST List[1];\r
+} IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;\r
\r
//\r
// Global debug flag\r
extern ULONG NtGlobalFlag;\r
\r
\r
+#include <pshpack4.h>\r
+typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {\r
+ UCHAR Type;\r
+ UCHAR ShareDisposition;\r
+ USHORT Flags;\r
+ union {\r
+ struct {\r
+ PHYSICAL_ADDRESS Start;\r
+ ULONG Length;\r
+ } Generic;\r
+ struct {\r
+ PHYSICAL_ADDRESS Start;\r
+ ULONG Length;\r
+ } Port;\r
+ struct {\r
+ ULONG Level;\r
+ ULONG Vector;\r
+ KAFFINITY Affinity;\r
+ } Interrupt;\r
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)\r
+ struct {\r
+ union {\r
+ struct {\r
+ USHORT Reserved;\r
+ USHORT MessageCount;\r
+ ULONG Vector;\r
+ KAFFINITY Affinity;\r
+ } Raw;\r
+ struct {\r
+ ULONG Level;\r
+ ULONG Vector;\r
+ KAFFINITY Affinity;\r
+ } Translated;\r
+ };\r
+ } MessageInterrupt;\r
+#endif\r
+ struct {\r
+ PHYSICAL_ADDRESS Start;\r
+ ULONG Length;\r
+ } Memory;\r
+ struct {\r
+ ULONG Channel;\r
+ ULONG Port;\r
+ ULONG Reserved1;\r
+ } Dma;\r
+ struct {\r
+ ULONG Data[3];\r
+ } DevicePrivate;\r
+ struct {\r
+ ULONG Start;\r
+ ULONG Length;\r
+ ULONG Reserved;\r
+ } BusNumber;\r
+ struct {\r
+ ULONG DataSize;\r
+ ULONG Reserved1;\r
+ ULONG Reserved2;\r
+ } DeviceSpecificData;\r
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)\r
+ struct {\r
+ PHYSICAL_ADDRESS Start;\r
+ ULONG Length40;\r
+ } Memory40;\r
+ struct {\r
+ PHYSICAL_ADDRESS Start;\r
+ ULONG Length48;\r
+ } Memory48;\r
+ struct {\r
+ PHYSICAL_ADDRESS Start;\r
+ ULONG Length64;\r
+ } Memory64;\r
+#endif\r
+ } u;\r
+} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;\r
+#include <poppack.h>\r
\r
//\r
// Section map options\r
/*\r
* PVOID\r
* InterlockedExchangePointer(\r
- * IN OUT PVOID VOLATILE *Target,\r
+ * IN OUT PVOID volatile *Target,\r
* IN PVOID Value)\r
*/\r
#define InterlockedExchangePointer(Target, Value) \\r
ULONGLONG Reserved:59;\r
ULONGLONG Region:3;\r
} Header8;\r
+ struct {\r
ULONGLONG Depth:16;\r
ULONGLONG Sequence:48;\r
ULONGLONG HeaderType:1;\r
ULONGLONG Init:1;\r
ULONGLONG Reserved:2;\r
ULONGLONG NextEntry:60;\r
- struct {\r
} Header16;\r
} SLIST_HEADER, *PSLIST_HEADER;\r
#else\r
IN OUT PULONG Remainder)\r
{\r
if (Remainder)\r
- *Remainder = Dividend.QuadPart % Divisor;\r
- return Dividend.QuadPart / Divisor;\r
+ *Remainder = (ULONG)(Dividend.QuadPart % Divisor);\r
+ return (ULONG)(Dividend.QuadPart / Divisor);\r
}\r
\r
//DECLSPEC_DEPRECATED_DDK\r
#endif\r
\r
#if defined(_AMD64_)\r
+\r
+#define MultiplyHigh __mulh\r
+#define UnsignedMultiplyHigh __umulh\r
+\r
//DECLSPEC_DEPRECATED_DDK\r
static __inline\r
LARGE_INTEGER\r
RtlExtendedMagicDivide(\r
IN LARGE_INTEGER Dividend,\r
IN LARGE_INTEGER MagicDivisor,\r
- IN CCHAR ShiftCount);\r
+ IN CCHAR ShiftCount)\r
{\r
LARGE_INTEGER ret;\r
ULONG64 ret64;\r
BOOLEAN Pos;\r
Pos = (Dividend.QuadPart >= 0);\r
- ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart\r
+ ret64 = UnsignedMultiplyHigh(Pos ? Dividend.QuadPart : -Dividend.QuadPart,\r
MagicDivisor.QuadPart);\r
ret64 >>= ShiftCount;\r
ret.QuadPart = Pos ? ret64 : -ret64;\r
};\r
} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;\r
\r
+typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;\r
+\r
typedef enum _WORK_QUEUE_TYPE {\r
CriticalWorkQueue,\r
DelayedWorkQueue,\r