/* Class 9 - Flags Information */
QSI_DEF(SystemFlagsInformation)
{
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+ *ReqSize = sizeof(SYSTEM_FLAGS_INFORMATION);
+#endif
+
if (sizeof(SYSTEM_FLAGS_INFORMATION) != Size)
{
- *ReqSize = sizeof(SYSTEM_FLAGS_INFORMATION);
- return (STATUS_INFO_LENGTH_MISMATCH);
+ return STATUS_INFO_LENGTH_MISMATCH;
}
+
((PSYSTEM_FLAGS_INFORMATION) Buffer)->Flags = NtGlobalFlag;
+#if (NTDDI_VERSION < NTDDI_VISTA)
+ *ReqSize = sizeof(SYSTEM_FLAGS_INFORMATION);
+#endif
+
return STATUS_SUCCESS;
}
{
PSYSTEM_KERNEL_DEBUGGER_INFORMATION skdi = (PSYSTEM_KERNEL_DEBUGGER_INFORMATION) Buffer;
+#if (NTDDI_VERSION >= NTDDI_VISTA)
*ReqSize = sizeof(SYSTEM_KERNEL_DEBUGGER_INFORMATION);
+#endif
+
if (Size < sizeof(SYSTEM_KERNEL_DEBUGGER_INFORMATION))
{
return STATUS_INFO_LENGTH_MISMATCH;
skdi->KernelDebuggerEnabled = KD_DEBUGGER_ENABLED;
skdi->KernelDebuggerNotPresent = KD_DEBUGGER_NOT_PRESENT;
+#if (NTDDI_VERSION < NTDDI_VISTA)
+ *ReqSize = sizeof(SYSTEM_KERNEL_DEBUGGER_INFORMATION);
+#endif
+
return STATUS_SUCCESS;
}
{
NTSTATUS (* Query) (PVOID,ULONG,PULONG);
NTSTATUS (* Set) (PVOID,ULONG);
- ULONG Alignment;
} QSSI_CALLS;
// QS Query & Set
// XS Set
// XX unknown behaviour
//
-#define SI_QS(n) {QSI_USE(n),SSI_USE(n),TYPE_ALIGNMENT(ULONG)}
-#define SI_QX(n) {QSI_USE(n),NULL,TYPE_ALIGNMENT(ULONG)}
-#define SI_XS(n) {NULL,SSI_USE(n),TYPE_ALIGNMENT(ULONG)}
-#define SI_QS_ALIGN(n,a) {QSI_USE(n),SSI_USE(n),a}
-#define SI_QX_ALIGN(n,a) {QSI_USE(n),NULL,a}
-#define SI_XS_ALIGN(n,a) {NULL,SSI_USE(n),a}
+#define SI_QS(n) {QSI_USE(n),SSI_USE(n)}
+#define SI_QX(n) {QSI_USE(n),NULL}
+#define SI_XS(n) {NULL,SSI_USE(n)}
#define SI_XX(n) {NULL,NULL}
static
SI_QX(SystemCrashDumpInformation),
SI_QX(SystemExceptionInformation),
SI_QX(SystemCrashDumpStateInformation),
- SI_QX_ALIGN(SystemKernelDebuggerInformation, TYPE_ALIGNMENT(BOOLEAN)),
+ SI_QX(SystemKernelDebuggerInformation),
SI_QX(SystemContextSwitchInformation),
SI_QS(SystemRegistryQuotaInformation),
SI_XS(SystemExtendServiceTableInformation),
{
KPROCESSOR_MODE PreviousMode;
ULONG ResultLength = 0;
+ ULONG Alignment = TYPE_ALIGNMENT(ULONG);
NTSTATUS FStatus = STATUS_NOT_IMPLEMENTED;
PAGED_CODE();
_SEH2_TRY
{
+#if (NTDDI_VERSION >= NTDDI_VISTA)
/*
* Check if the request is valid.
*/
{
_SEH2_YIELD(return STATUS_INVALID_INFO_CLASS);
}
+#endif
if (PreviousMode != KernelMode)
{
/* SystemKernelDebuggerInformation needs only BOOLEAN alignment */
- ProbeForWrite(SystemInformation, Length, CallQS[SystemInformationClass].Alignment);
+ if (SystemInformationClass == SystemKernelDebuggerInformation)
+ Alignment = TYPE_ALIGNMENT(BOOLEAN);
+
+ ProbeForWrite(SystemInformation, Length, Alignment);
if (UnsafeResultLength != NULL)
ProbeForWriteUlong(UnsafeResultLength);
}
if (UnsafeResultLength)
*UnsafeResultLength = 0;
+#if (NTDDI_VERSION < NTDDI_VISTA)
+ /*
+ * Check if the request is valid.
+ */
+ if (SystemInformationClass >= MAX_SYSTEM_INFO_CLASS)
+ {
+ _SEH2_YIELD(return STATUS_INVALID_INFO_CLASS);
+ }
+#endif
+
if (NULL != CallQS [SystemInformationClass].Query)
{
/*