mirror of
https://github.com/reactos/reactos.git
synced 2024-10-15 05:37:44 +00:00
[BASESRV]
Implement BaseSrvExitVDM. svn path=/branches/ntvdm/; revision=62315
This commit is contained in:
parent
9542b86934
commit
5036028dd4
|
@ -190,8 +190,61 @@ CSR_API(BaseSrvGetNextVDMCommand)
|
||||||
|
|
||||||
CSR_API(BaseSrvExitVDM)
|
CSR_API(BaseSrvExitVDM)
|
||||||
{
|
{
|
||||||
DPRINT1("%s not yet implemented\n", __FUNCTION__);
|
NTSTATUS Status;
|
||||||
return STATUS_NOT_IMPLEMENTED;
|
PBASE_EXIT_VDM ExitVdmRequest = &((PBASE_API_MESSAGE)ApiMessage)->Data.ExitVDMRequest;
|
||||||
|
PRTL_CRITICAL_SECTION CriticalSection = NULL;
|
||||||
|
PVDM_CONSOLE_RECORD ConsoleRecord = NULL;
|
||||||
|
PVDM_DOS_RECORD DosRecord;
|
||||||
|
|
||||||
|
CriticalSection = (ExitVdmRequest->iWowTask == 0)
|
||||||
|
? &DosCriticalSection
|
||||||
|
: &WowCriticalSection;
|
||||||
|
|
||||||
|
/* Enter the critical section */
|
||||||
|
RtlEnterCriticalSection(CriticalSection);
|
||||||
|
|
||||||
|
if (ExitVdmRequest->iWowTask == 0)
|
||||||
|
{
|
||||||
|
/* Get the console record */
|
||||||
|
Status = BaseSrvGetConsoleRecord(ExitVdmRequest->ConsoleHandle, &ConsoleRecord);
|
||||||
|
if (!NT_SUCCESS(Status)) goto Cleanup;
|
||||||
|
|
||||||
|
/* Cleanup the DOS records */
|
||||||
|
while (ConsoleRecord->DosListHead.Flink != &ConsoleRecord->DosListHead)
|
||||||
|
{
|
||||||
|
DosRecord = CONTAINING_RECORD(ConsoleRecord->DosListHead.Flink,
|
||||||
|
VDM_DOS_RECORD,
|
||||||
|
Entry);
|
||||||
|
|
||||||
|
/* Remove the DOS entry */
|
||||||
|
RemoveEntryList(&DosRecord->Entry);
|
||||||
|
RtlFreeHeap(BaseSrvHeap, 0, DosRecord);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ConsoleRecord->CurrentDirs != NULL)
|
||||||
|
{
|
||||||
|
/* Free the current directories */
|
||||||
|
RtlFreeHeap(BaseSrvHeap, 0, ConsoleRecord->CurrentDirs);
|
||||||
|
ConsoleRecord->CurrentDirs = NULL;
|
||||||
|
ConsoleRecord->CurDirsLength = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove the console record */
|
||||||
|
RemoveEntryList(&ConsoleRecord->Entry);
|
||||||
|
RtlFreeHeap(BaseSrvHeap, 0, ConsoleRecord);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// TODO: NOT IMPLEMENTED
|
||||||
|
UNIMPLEMENTED;
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
Cleanup:
|
||||||
|
/* Leave the critical section */
|
||||||
|
RtlLeaveCriticalSection(CriticalSection);
|
||||||
|
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSR_API(BaseSrvIsFirstVDM)
|
CSR_API(BaseSrvIsFirstVDM)
|
||||||
|
|
Loading…
Reference in a new issue