1 /* $Id: sysinfo.c,v 1.5 2000/04/25 23:22:56 ea Exp $
3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: ntoskrnl/ex/sysinfo.c
6 * PURPOSE: System information functions
7 * PROGRAMMER: David Welch (welch@mcmail.com)
12 /* INCLUDES *****************************************************************/
14 #include <ddk/ntddk.h>
15 #include <ddk/zwtypes.h>
17 #include <internal/ex.h>
19 #include <internal/debug.h>
21 extern ULONG NtGlobalFlag
; /* FIXME: it should go in a ddk/?.h */
23 /* FUNCTIONS *****************************************************************/
27 NtQuerySystemEnvironmentValue (
28 IN PUNICODE_STRING Name
,
31 IN OUT PULONG ReturnLength
40 NtSetSystemEnvironmentValue (
41 IN PUNICODE_STRING VariableName
,
42 IN PUNICODE_STRING Value
49 /* --- Query/Set System Information --- */
53 * NOTE: QSI_DEF(n) and SSI_DEF(n) define _cdecl function symbols
54 * so the stack is popped only in one place on x86 platform.
56 #define QSI_USE(n) QSI##n
58 static NTSTATUS QSI_USE(n) (PVOID Buffer, ULONG Size, PULONG ReqSize)
60 #define SSI_USE(n) SSI##n
62 static NTSTATUS SSI_USE(n) (PVOID Buffer, ULONG Size)
64 /* Class 0 - Basic Information */
65 QSI_DEF(SystemBasicInformation
)
67 PSYSTEM_BASIC_INFORMATION Sbi
68 = (PSYSTEM_BASIC_INFORMATION
) Buffer
;
70 *ReqSize
= sizeof (SYSTEM_BASIC_INFORMATION
);
72 * Check user buffer's size
74 if (Size
< sizeof (SYSTEM_BASIC_INFORMATION
))
76 return (STATUS_INFO_LENGTH_MISMATCH
);
80 Sbi
->KeMaximumIncrement
= 0; /* FIXME */
81 Sbi
->MmPageSize
= PAGESIZE
; /* FIXME: it should be PAGE_SIZE */
82 Sbi
->MmNumberOfPhysicalPages
= 0; /* FIXME */
83 Sbi
->MmLowestPhysicalPage
= 0; /* FIXME */
84 Sbi
->MmHighestPhysicalPage
= 0; /* FIXME */
85 Sbi
->MmLowestUserAddress
= 0; /* FIXME */
86 Sbi
->MmLowestUserAddress1
= 0; /* FIXME */
87 Sbi
->MmHighestUserAddress
= 0; /* FIXME */
88 Sbi
->KeActiveProcessors
= 0x00000001; /* FIXME */
89 Sbi
->KeNumberProcessors
= 1; /* FIXME */
91 return (STATUS_SUCCESS
);
94 /* Class 1 - Processor Information */
95 QSI_DEF(SystemProcessorInformation
)
97 PSYSTEM_PROCESSOR_INFORMATION Spi
98 = (PSYSTEM_PROCESSOR_INFORMATION
) Buffer
;
100 *ReqSize
= sizeof (SYSTEM_PROCESSOR_INFORMATION
);
102 * Check user buffer's size
104 if (Size
< sizeof (SYSTEM_PROCESSOR_INFORMATION
))
106 return (STATUS_INFO_LENGTH_MISMATCH
);
109 /* FIXME: add CPU type detection code */
110 Spi
->KeProcessorArchitecture
= 0; /* FIXME */
111 Spi
->KeProcessorLevel
= 0; /* FIXME */
112 Spi
->KeProcessorRevision
= 0; /* FIXME */
114 Spi
->KeFeatureBits
= 0x00000000; /* FIXME */
116 return (STATUS_SUCCESS
);
119 /* Class 2 - Performance Information */
120 QSI_DEF(SystemPerformanceInfo
)
122 PSYSTEM_PERFORMANCE_INFO Spi
123 = (PSYSTEM_PERFORMANCE_INFO
) Buffer
;
125 *ReqSize
= sizeof (SYSTEM_PERFORMANCE_INFO
);
127 * Check user buffer's size
129 if (Size
< sizeof (SYSTEM_PERFORMANCE_INFO
))
131 return (STATUS_INFO_LENGTH_MISMATCH
);
134 Spi
->TotalProcessorTime
.QuadPart
= 0; /* FIXME */
135 Spi
->IoReadTransferCount
.QuadPart
= 0; /* FIXME */
136 Spi
->IoWriteTransferCount
.QuadPart
= 0; /* FIXME */
137 Spi
->IoOtherTransferCount
.QuadPart
= 0; /* FIXME */
138 Spi
->IoReadOperationCount
= 0; /* FIXME */
139 Spi
->IoWriteOperationCount
= 0; /* FIXME */
140 Spi
->IoOtherOperationCount
= 0; /* FIXME */
141 Spi
->MmAvailablePages
= 0; /* FIXME */
142 Spi
->MmTotalCommitedPages
= 0; /* FIXME */
143 Spi
->MmTotalCommitLimit
= 0; /* FIXME */
144 Spi
->MmPeakLimit
= 0; /* FIXME */
145 Spi
->PageFaults
= 0; /* FIXME */
146 Spi
->WriteCopies
= 0; /* FIXME */
147 Spi
->TransitionFaults
= 0; /* FIXME */
148 Spi
->Unknown1
= 0; /* FIXME */
149 Spi
->DemandZeroFaults
= 0; /* FIXME */
150 Spi
->PagesInput
= 0; /* FIXME */
151 Spi
->PagesRead
= 0; /* FIXME */
152 Spi
->Unknown2
= 0; /* FIXME */
153 Spi
->Unknown3
= 0; /* FIXME */
154 Spi
->PagesOutput
= 0; /* FIXME */
155 Spi
->PageWrites
= 0; /* FIXME */
156 Spi
->Unknown4
= 0; /* FIXME */
157 Spi
->Unknown5
= 0; /* FIXME */
158 Spi
->PoolPagedBytes
= 0; /* FIXME */
159 Spi
->PoolNonPagedBytes
= 0; /* FIXME */
160 Spi
->Unknown6
= 0; /* FIXME */
161 Spi
->Unknown7
= 0; /* FIXME */
162 Spi
->Unknown8
= 0; /* FIXME */
163 Spi
->Unknown9
= 0; /* FIXME */
164 Spi
->MmTotalSystemFreePtes
= 0; /* FIXME */
165 Spi
->MmSystemCodepage
= 0; /* FIXME */
166 Spi
->MmTotalSystemDriverPages
= 0; /* FIXME */
167 Spi
->MmTotalSystemCodePages
= 0; /* FIXME */
168 Spi
->Unknown10
= 0; /* FIXME */
169 Spi
->Unknown11
= 0; /* FIXME */
170 Spi
->Unknown12
= 0; /* FIXME */
171 Spi
->MmSystemCachePage
= 0; /* FIXME */
172 Spi
->MmPagedPoolPage
= 0; /* FIXME */
173 Spi
->MmSystemDriverPage
= 0; /* FIXME */
174 Spi
->CcFastReadNoWait
= 0; /* FIXME */
175 Spi
->CcFastReadWait
= 0; /* FIXME */
176 Spi
->CcFastReadResourceMiss
= 0; /* FIXME */
177 Spi
->CcFastReadNotPossible
= 0; /* FIXME */
178 Spi
->CcFastMdlReadNoWait
= 0; /* FIXME */
179 Spi
->CcFastMdlReadWait
= 0; /* FIXME */
180 Spi
->CcFastMdlReadResourceMiss
= 0; /* FIXME */
181 Spi
->CcFastMdlReadNotPossible
= 0; /* FIXME */
182 Spi
->CcMapDataNoWait
= 0; /* FIXME */
183 Spi
->CcMapDataWait
= 0; /* FIXME */
184 Spi
->CcMapDataNoWaitMiss
= 0; /* FIXME */
185 Spi
->CcMapDataWaitMiss
= 0; /* FIXME */
186 Spi
->CcPinMappedDataCount
= 0; /* FIXME */
187 Spi
->CcPinReadNoWait
= 0; /* FIXME */
188 Spi
->CcPinReadWait
= 0; /* FIXME */
189 Spi
->CcPinReadNoWaitMiss
= 0; /* FIXME */
190 Spi
->CcPinReadWaitMiss
= 0; /* FIXME */
191 Spi
->CcCopyReadNoWait
= 0; /* FIXME */
192 Spi
->CcCopyReadWait
= 0; /* FIXME */
193 Spi
->CcCopyReadNoWaitMiss
= 0; /* FIXME */
194 Spi
->CcCopyReadWaitMiss
= 0; /* FIXME */
195 Spi
->CcMdlReadNoWait
= 0; /* FIXME */
196 Spi
->CcMdlReadWait
= 0; /* FIXME */
197 Spi
->CcMdlReadNoWaitMiss
= 0; /* FIXME */
198 Spi
->CcMdlReadWaitMiss
= 0; /* FIXME */
199 Spi
->CcReadaheadIos
= 0; /* FIXME */
200 Spi
->CcLazyWriteIos
= 0; /* FIXME */
201 Spi
->CcLazyWritePages
= 0; /* FIXME */
202 Spi
->CcDataFlushes
= 0; /* FIXME */
203 Spi
->CcDataPages
= 0; /* FIXME */
204 Spi
->ContextSwitches
= 0; /* FIXME */
205 Spi
->Unknown13
= 0; /* FIXME */
206 Spi
->Unknown14
= 0; /* FIXME */
207 Spi
->SystemCalls
= 0; /* FIXME */
209 return (STATUS_SUCCESS
);
212 /* Class 3 - Time Information */
213 QSI_DEF(SystemTimeInformation
)
215 PSYSTEM_TIME_INFORMATION Sti
216 = (PSYSTEM_TIME_INFORMATION
) Buffer
;
218 *ReqSize
= sizeof (SYSTEM_TIME_INFORMATION
);
220 * Check user buffer's size
222 if (Size
< sizeof (SYSTEM_TIME_INFORMATION
))
224 return (STATUS_INFO_LENGTH_MISMATCH
);
227 Sti
->KeBootTime
.QuadPart
= 0; /* FIXME */
228 Sti
->KeSystemTime
.QuadPart
= 0; /* FIXME */
229 Sti
->ExpTimeZoneBias
.QuadPart
= 0; /* FIXME */
230 Sti
->ExpTimeZoneId
= 0; /* FIXME */
231 Sti
->Unused
= 0; /* FIXME */
233 return (STATUS_SUCCESS
);
236 /* Class 4 - Path Information */
237 QSI_DEF(SystemPathInformation
)
239 /* FIXME: QSI returns STATUS_BREAKPOINT. Why? */
240 return (STATUS_BREAKPOINT
);
243 /* Class 5 - Process Information */
244 QSI_DEF(SystemProcessInformation
)
246 /* FIXME: scan the process+thread list */
247 return (STATUS_NOT_IMPLEMENTED
);
250 /* Class 6 - SDT Information */
251 QSI_DEF(SystemServiceDescriptorTableInfo
)
254 return (STATUS_NOT_IMPLEMENTED
);
257 /* Class 7 - I/O Configuration Information */
258 QSI_DEF(SystemIoConfigInfo
)
261 return (STATUS_NOT_IMPLEMENTED
);
264 /* Class 8 - Processor Time Information */
265 QSI_DEF(SystemProcessorTimeInfo
)
268 return (STATUS_NOT_IMPLEMENTED
);
271 /* Class 9 - Global Flag Information */
272 QSI_DEF(SystemNtGlobalFlagInformation
)
274 if (sizeof (SYSTEM_GLOBAL_FLAG_INFO
) != Size
)
276 * ReqSize
= sizeof (SYSTEM_GLOBAL_FLAG_INFO
);
277 return (STATUS_INFO_LENGTH_MISMATCH
);
279 ((PSYSTEM_GLOBAL_FLAG_INFO
) Buffer
)->NtGlobalFlag
= NtGlobalFlag
;
280 return (STATUS_SUCCESS
);
283 SSI_DEF(SystemNtGlobalFlagInformation
)
285 if (sizeof (SYSTEM_GLOBAL_FLAG_INFO
) != Size
)
287 return (STATUS_INFO_LENGTH_MISMATCH
);
289 NtGlobalFlag
= ((PSYSTEM_GLOBAL_FLAG_INFO
) Buffer
)->NtGlobalFlag
;
290 return (STATUS_SUCCESS
);
293 /* Class 10 - ? Information */
294 QSI_DEF(SystemInformation10
)
297 return (STATUS_NOT_IMPLEMENTED
);
300 /* Class 11 - Modules Information */
301 QSI_DEF(SystemModuleInfo
)
304 return (STATUS_NOT_IMPLEMENTED
);
307 /* Class 12 - Resource Lock Information */
308 QSI_DEF(SystemResourceLockInfo
)
311 return (STATUS_NOT_IMPLEMENTED
);
314 /* Class 13 - ? Information */
315 QSI_DEF(SystemInformation13
)
318 return (STATUS_NOT_IMPLEMENTED
);
321 /* Class 14 - ? Information */
322 QSI_DEF(SystemInformation14
)
325 return (STATUS_NOT_IMPLEMENTED
);
328 /* Class 15 - ? Information */
329 QSI_DEF(SystemInformation15
)
332 return (STATUS_NOT_IMPLEMENTED
);
335 /* Class 16 - Handle Information */
336 QSI_DEF(SystemHandleInfo
)
339 return (STATUS_NOT_IMPLEMENTED
);
342 /* Class 17 - Information */
343 QSI_DEF(SystemObjectInformation
)
346 return (STATUS_NOT_IMPLEMENTED
);
349 /* Class 18 - Information */
350 QSI_DEF(SystemPageFileInformation
)
353 return (STATUS_NOT_IMPLEMENTED
);
356 /* Class 19 - Information */
357 QSI_DEF(SystemInstructionEmulationInfo
)
360 return (STATUS_NOT_IMPLEMENTED
);
363 /* Class 20 - ? Information */
364 QSI_DEF(SystemInformation20
)
367 return (STATUS_NOT_IMPLEMENTED
);
370 /* Class 21 - Information */
371 QSI_DEF(SystemCacheInformation
)
373 if (Size
< sizeof (SYSTEM_CACHE_INFORMATION
))
375 * ReqSize
= sizeof (SYSTEM_CACHE_INFORMATION
);
376 return (STATUS_INFO_LENGTH_MISMATCH
);
379 return (STATUS_NOT_IMPLEMENTED
);
382 SSI_DEF(SystemCacheInformation
)
384 if (Size
< sizeof (SYSTEM_CACHE_INFORMATION
))
386 return (STATUS_INFO_LENGTH_MISMATCH
);
389 return (STATUS_NOT_IMPLEMENTED
);
392 /* Class 22 - Pool Tag Information */
393 QSI_DEF(SystemPoolTagInformation
)
396 return (STATUS_NOT_IMPLEMENTED
);
399 /* Class 23 - Processor Schedule Information */
400 QSI_DEF(SystemProcessorScheduleInfo
)
403 return (STATUS_NOT_IMPLEMENTED
);
406 /* Class 24 - DPC Information */
407 QSI_DEF(SystemDpcInformation
)
410 return (STATUS_NOT_IMPLEMENTED
);
413 SSI_DEF(SystemDpcInformation
)
416 return (STATUS_NOT_IMPLEMENTED
);
419 /* Class 25 - ? Information */
420 QSI_DEF(SystemInformation25
)
423 return (STATUS_NOT_IMPLEMENTED
);
426 /* Class 26 - Load Image (callable) */
427 SSI_DEF(SystemLoadImage
)
430 return (STATUS_NOT_IMPLEMENTED
);
433 /* Class 27 - Unload Image (callable) */
434 SSI_DEF(SystemUnloadImage
)
437 return (STATUS_NOT_IMPLEMENTED
);
440 /* Class 28 - Information */
441 QSI_DEF(SystemTimeAdjustmentInformation
)
443 if (sizeof (SYSTEM_TIME_ADJUSTMENT_INFO
) > Size
)
445 * ReqSize
= sizeof (SYSTEM_TIME_ADJUSTMENT_INFO
);
446 return (STATUS_INFO_LENGTH_MISMATCH
);
449 return (STATUS_NOT_IMPLEMENTED
);
452 SSI_DEF(SystemTimeAdjustmentInformation
)
454 if (sizeof (SYSTEM_TIME_ADJUSTMENT_INFO
) > Size
)
456 return (STATUS_INFO_LENGTH_MISMATCH
);
459 return (STATUS_NOT_IMPLEMENTED
);
462 /* Class 29 - ? Information */
463 QSI_DEF(SystemInformation29
)
466 return (STATUS_NOT_IMPLEMENTED
);
469 /* Class 30 - ? Information */
470 QSI_DEF(SystemInformation30
)
473 return (STATUS_NOT_IMPLEMENTED
);
476 /* Class 31 - ? Information */
477 QSI_DEF(SystemInformation31
)
480 return (STATUS_NOT_IMPLEMENTED
);
483 /* Class 32 - Crach Dump Information */
484 QSI_DEF(SystemCrashDumpSectionInfo
)
487 return (STATUS_NOT_IMPLEMENTED
);
490 /* Class 33 - Processor Fault Information */
491 QSI_DEF(SystemProcessorFaultCountInfo
)
494 return (STATUS_NOT_IMPLEMENTED
);
497 /* Class 34 - Crach Dump State Information */
498 QSI_DEF(SystemCrashDumpStateInfo
)
501 return (STATUS_NOT_IMPLEMENTED
);
504 /* Class 35 - Debugger Information */
505 QSI_DEF(SystemDebuggerInfo
)
508 return (STATUS_NOT_IMPLEMENTED
);
511 /* Class 36 - Thread Switch Counters Information */
512 QSI_DEF(SystemThreadSwitchCountersInfo
)
515 return (STATUS_NOT_IMPLEMENTED
);
518 /* Class 37 - Quota Information */
519 QSI_DEF(SystemQuotaInformation
)
522 return (STATUS_NOT_IMPLEMENTED
);
525 SSI_DEF(SystemQuotaInformation
)
528 return (STATUS_NOT_IMPLEMENTED
);
531 /* Class 38 - Load Driver Information */
532 SSI_DEF(SystemLoadDriverInfo
)
535 return (STATUS_NOT_IMPLEMENTED
);
538 /* Class 39 - Priority Separation Information */
539 SSI_DEF(SystemPrioritySeparationInfo
)
542 return (STATUS_NOT_IMPLEMENTED
);
545 /* Class 40 - ? Information */
546 QSI_DEF(SystemInformation40
)
549 return (STATUS_NOT_IMPLEMENTED
);
552 /* Class 41 - ? Information */
553 QSI_DEF(SystemInformation41
)
556 return (STATUS_NOT_IMPLEMENTED
);
559 /* Class 42 - ? Information */
560 QSI_DEF(SystemInformation42
)
563 return (STATUS_NOT_IMPLEMENTED
);
566 /* Class 43 - ? Information */
567 QSI_DEF(SystemInformation43
)
570 return (STATUS_NOT_IMPLEMENTED
);
573 /* Class 44 - Information */
574 QSI_DEF(SystemTimeZoneInformation
)
576 * ReqSize
= sizeof (TIME_ZONE_INFORMATION
);
578 if (sizeof (TIME_ZONE_INFORMATION
) != Size
)
580 return (STATUS_INFO_LENGTH_MISMATCH
);
582 /* Copy the time zone information struct */
585 & SystemTimeZoneInfo
,
586 sizeof (TIME_ZONE_INFORMATION
)
589 return (STATUS_SUCCESS
);
593 SSI_DEF(SystemTimeZoneInformation
)
596 * Check user buffer's size
598 if (Size
< sizeof (TIME_ZONE_INFORMATION
))
600 return (STATUS_INFO_LENGTH_MISMATCH
);
602 /* Copy the time zone information struct */
604 & SystemTimeZoneInfo
,
605 (TIME_ZONE_INFORMATION
*) Buffer
,
606 sizeof (TIME_ZONE_INFORMATION
)
608 return (STATUS_SUCCESS
);
612 /* Class 45 - Information */
613 QSI_DEF(SystemLookasideInformation
)
616 return (STATUS_NOT_IMPLEMENTED
);
620 /* Query/Set Calls Table */
624 NTSTATUS (* Query
) (PVOID
,ULONG
,PULONG
);
625 NTSTATUS (* Set
) (PVOID
,ULONG
);
632 // XX unknown behaviour
634 #define SI_QS(n) {QSI_USE(n),SSI_USE(n)}
635 #define SI_QX(n) {QSI_USE(n),NULL}
636 #define SI_XS(n) {NULL,SSI_USE(n)}
637 #define SI_XX(n) {NULL,NULL}
643 SI_QX(SystemBasicInformation
),
644 SI_QX(SystemProcessorInformation
),
645 SI_QX(SystemPerformanceInfo
),
646 SI_QX(SystemTimeInformation
),
647 SI_QX(SystemPathInformation
), /* should be SI_XX */
648 SI_QX(SystemProcessInformation
),
649 SI_QX(SystemServiceDescriptorTableInfo
),
650 SI_QX(SystemIoConfigInfo
),
651 SI_QX(SystemProcessorTimeInfo
),
652 SI_QS(SystemNtGlobalFlagInformation
),
653 SI_QX(SystemInformation10
), /* should be SI_XX */
654 SI_QX(SystemModuleInfo
),
655 SI_QX(SystemResourceLockInfo
),
656 SI_QX(SystemInformation13
), /* should be SI_XX */
657 SI_QX(SystemInformation14
), /* should be SI_XX */
658 SI_QX(SystemInformation15
), /* should be SI_XX */
659 SI_QX(SystemHandleInfo
),
660 SI_QX(SystemObjectInformation
),
661 SI_QX(SystemPageFileInformation
),
662 SI_QX(SystemInstructionEmulationInfo
),
663 SI_QX(SystemInformation20
), /* it should be SI_XX */
664 SI_QS(SystemCacheInformation
),
665 SI_QX(SystemPoolTagInformation
),
666 SI_QX(SystemProcessorScheduleInfo
),
667 SI_QS(SystemDpcInformation
),
668 SI_QX(SystemInformation25
), /* it should be SI_XX */
669 SI_XS(SystemLoadImage
),
670 SI_XS(SystemUnloadImage
),
671 SI_QS(SystemTimeAdjustmentInformation
),
672 SI_QX(SystemInformation29
), /* it should be SI_XX */
673 SI_QX(SystemInformation30
), /* it should be SI_XX */
674 SI_QX(SystemInformation31
), /* it should be SI_XX */
675 SI_QX(SystemCrashDumpSectionInfo
),
676 SI_QX(SystemProcessorFaultCountInfo
),
677 SI_QX(SystemCrashDumpStateInfo
),
678 SI_QX(SystemDebuggerInfo
),
679 SI_QX(SystemThreadSwitchCountersInfo
),
680 SI_QS(SystemQuotaInformation
),
681 SI_XS(SystemLoadDriverInfo
),
682 SI_XS(SystemPrioritySeparationInfo
),
683 SI_QX(SystemInformation40
), /* it should be SI_XX */
684 SI_QX(SystemInformation41
), /* it should be SI_XX */
685 SI_QX(SystemInformation42
), /* it should be SI_XX */
686 SI_QX(SystemInformation43
), /* it should be SI_XX */
687 SI_QS(SystemTimeZoneInformation
), /* it should be SI_QX */
688 SI_QX(SystemLookasideInformation
)
694 NtQuerySystemInformation (
695 IN SYSTEM_INFORMATION_CLASS SystemInformationClass
,
696 OUT PVOID SystemInformation
,
698 OUT PULONG ResultLength
702 * If called from user mode, check
703 * possible unsafe arguments.
706 if (KernelMode
!= KeGetPreviousMode())
710 // SystemInformation,
720 * Clear the user buffer.
722 RtlZeroMemory (SystemInformation
, Length
);
724 * Check the request is valid.
726 if ( (SystemInformationClass
>= SystemInformationClassMin
)
727 && (SystemInformationClass
< SystemInformationClassMax
)
730 if (NULL
!= CallQS
[SystemInformationClass
].Query
)
733 * Hand the request to a subhandler.
735 return CallQS
[SystemInformationClass
].Query (
742 return (STATUS_INVALID_INFO_CLASS
);
748 NtSetSystemInformation (
749 IN SYSTEM_INFORMATION_CLASS SystemInformationClass
,
750 IN PVOID SystemInformation
,
751 IN ULONG SystemInformationLength
755 * If called from user mode, check
756 * possible unsafe arguments.
759 if (KernelMode
!= KeGetPreviousMode())
763 // SystemInformation,
773 * Check the request is valid.
775 if ( (SystemInformationClass
>= SystemInformationClassMin
)
776 && (SystemInformationClass
< SystemInformationClassMax
)
779 if (NULL
!= CallQS
[SystemInformationClass
].Set
)
782 * Hand the request to a subhandler.
784 return CallQS
[SystemInformationClass
].Set (
786 SystemInformationLength
790 return (STATUS_INVALID_INFO_CLASS
);
796 NtFlushInstructionCache (
797 IN HANDLE ProcessHandle
,
798 IN PVOID BaseAddress
,
799 IN UINT NumberOfBytesToFlush