mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 22:32:58 +00:00
[NTOSKRNL]
Implement NtQuerySystemInformation - SystemNumaAvailableMemory Stub out NtQuerySystemInformation - SystemPrefetcherInformation Stub out NtQuerySystemInformation - SystemExtendedProcessInformation Stub out NtQuerySystemInformation - SystemRecommendedSharedDataAlignment svn path=/trunk/; revision=68173
This commit is contained in:
parent
bb203b40e4
commit
de7f49ecd3
1 changed files with 88 additions and 1 deletions
|
@ -2212,6 +2212,88 @@ QSI_DEF(SystemNumaProcessorMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Class 56 - Prefetcher information */
|
||||||
|
QSI_DEF(SystemPrefetcherInformation)
|
||||||
|
{
|
||||||
|
/* FIXME */
|
||||||
|
DPRINT1("NtQuerySystemInformation - SystemPrefetcherInformation not implemented\n");
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Class 57 - Extended process information */
|
||||||
|
QSI_DEF(SystemExtendedProcessInformation)
|
||||||
|
{
|
||||||
|
/* FIXME */
|
||||||
|
DPRINT1("NtQuerySystemInformation - SystemExtendedProcessInformation not implemented\n");
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Class 58 - Recommended shared ata alignment */
|
||||||
|
QSI_DEF(SystemRecommendedSharedDataAlignment)
|
||||||
|
{
|
||||||
|
/* FIXME */
|
||||||
|
DPRINT1("NtQuerySystemInformation - SystemRecommendedSharedDataAlignment not implemented\n");
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Class 60 - NUMA memory information */
|
||||||
|
QSI_DEF(SystemNumaAvailableMemory)
|
||||||
|
{
|
||||||
|
ULONG MaxEntries, Node;
|
||||||
|
PSYSTEM_NUMA_INFORMATION NumaInformation = (PSYSTEM_NUMA_INFORMATION)Buffer;
|
||||||
|
|
||||||
|
/* Validate input size */
|
||||||
|
if (Size < sizeof(ULONG))
|
||||||
|
{
|
||||||
|
return STATUS_INFO_LENGTH_MISMATCH;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Return highest node */
|
||||||
|
NumaInformation->HighestNodeNumber = KeNumberNodes - 1;
|
||||||
|
|
||||||
|
/* Compute how much entries we will be able to put in output structure */
|
||||||
|
MaxEntries = (Size - FIELD_OFFSET(SYSTEM_NUMA_INFORMATION, AvailableMemory)) / sizeof(ULONGLONG);
|
||||||
|
/* Make sure we don't overflow KeNodeBlock */
|
||||||
|
if (MaxEntries > KeNumberNodes)
|
||||||
|
{
|
||||||
|
MaxEntries = KeNumberNodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we have entries to write, and room for it */
|
||||||
|
if (Size >= FIELD_OFFSET(SYSTEM_NUMA_INFORMATION, AvailableMemory) &&
|
||||||
|
MaxEntries != 0)
|
||||||
|
{
|
||||||
|
/* Already set size we return */
|
||||||
|
*ReqSize = FIELD_OFFSET(SYSTEM_NUMA_INFORMATION, AvailableMemory) +
|
||||||
|
MaxEntries * sizeof(ULONGLONG);
|
||||||
|
|
||||||
|
/* If we have a single entry (us), directly return MM information */
|
||||||
|
if (MaxEntries == 1)
|
||||||
|
{
|
||||||
|
NumaInformation->AvailableMemory[0] = MmAvailablePages << PAGE_SHIFT;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Otherwise, for each node, return available bytes */
|
||||||
|
for (Node = 0; Node < MaxEntries; ++Node)
|
||||||
|
{
|
||||||
|
NumaInformation->AvailableMemory[Node] = (KeNodeBlock[Node]->FreeCount[0] + KeNodeBlock[Node]->FreeCount[1]) << PAGE_SHIFT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* We only returned highest node number */
|
||||||
|
*ReqSize = sizeof(ULONG);
|
||||||
|
}
|
||||||
|
|
||||||
|
return STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Query/Set Calls Table */
|
/* Query/Set Calls Table */
|
||||||
typedef
|
typedef
|
||||||
struct _QSSI_CALLS
|
struct _QSSI_CALLS
|
||||||
|
@ -2290,7 +2372,12 @@ CallQS [] =
|
||||||
SI_XS(SystemAddVerifier),
|
SI_XS(SystemAddVerifier),
|
||||||
SI_QX(SystemSessionProcessesInformation),
|
SI_QX(SystemSessionProcessesInformation),
|
||||||
SI_XS(SystemLoadGdiDriverInSystemSpaceInformation),
|
SI_XS(SystemLoadGdiDriverInSystemSpaceInformation),
|
||||||
SI_QX(SystemNumaProcessorMap)
|
SI_QX(SystemNumaProcessorMap),
|
||||||
|
SI_QX(SystemPrefetcherInformation),
|
||||||
|
SI_QX(SystemExtendedProcessInformation),
|
||||||
|
SI_QX(SystemRecommendedSharedDataAlignment),
|
||||||
|
SI_XX(SystemComPlusPackage),
|
||||||
|
SI_QX(SystemNumaAvailableMemory)
|
||||||
};
|
};
|
||||||
|
|
||||||
C_ASSERT(SystemBasicInformation == 0);
|
C_ASSERT(SystemBasicInformation == 0);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue