[BASESRV]

Implement BaseSrvGetVDMCurDirs.
The current directory information is stored in the console record,
and it applies to all DOS records within it.


svn path=/branches/ntvdm/; revision=62086
This commit is contained in:
Aleksandar Andrejevic 2014-02-09 22:26:13 +00:00
parent 884d0853f8
commit d0176d9ee8
2 changed files with 40 additions and 3 deletions

View file

@ -115,7 +115,7 @@ CSR_API(BaseSrvIsFirstVDM)
/* Return the result */
IsFirstVDMRequest->FirstVDM = FirstVDM;
/* Clear the first VDM flag */
FirstVDM = FALSE;
@ -142,8 +142,43 @@ CSR_API(BaseSrvSetVDMCurDirs)
CSR_API(BaseSrvGetVDMCurDirs)
{
DPRINT1("%s not yet implemented\n", __FUNCTION__);
return STATUS_NOT_IMPLEMENTED;
NTSTATUS Status;
PBASE_GETSET_VDM_CURDIRS VDMCurrentDirsRequest = &((PBASE_API_MESSAGE)ApiMessage)->Data.VDMCurrentDirsRequest;
PVDM_CONSOLE_RECORD ConsoleRecord;
/* Validate the output buffer */
if (!CsrValidateMessageBuffer(ApiMessage,
(PVOID*)&VDMCurrentDirsRequest->lpszzCurDirs,
VDMCurrentDirsRequest->cchCurDirs,
sizeof(*VDMCurrentDirsRequest->lpszzCurDirs)))
{
return STATUS_INVALID_PARAMETER;
}
/* Enter the critical section */
RtlEnterCriticalSection(&DosCriticalSection);
/* Find the console record */
Status = BaseSrvGetConsoleRecord(VDMCurrentDirsRequest->ConsoleHandle, &ConsoleRecord);
if (!NT_SUCCESS(Status)) goto Cleanup;
/* Check if the buffer is large enough */
if (VDMCurrentDirsRequest->cchCurDirs < ConsoleRecord->CurDirsLength)
{
Status = STATUS_BUFFER_TOO_SMALL;
goto Cleanup;
}
/* Copy the data */
RtlMoveMemory(VDMCurrentDirsRequest->lpszzCurDirs,
ConsoleRecord->CurrentDirs,
ConsoleRecord->CurDirsLength);
Cleanup:
/* Leave the critical section */
RtlLeaveCriticalSection(&DosCriticalSection);
return Status;
}
CSR_API(BaseSrvBatNotification)

View file

@ -15,6 +15,8 @@ typedef struct _VDM_CONSOLE_RECORD
{
LIST_ENTRY Entry;
HANDLE ConsoleHandle;
PCHAR CurrentDirs;
ULONG CurDirsLength;
LIST_ENTRY DosListHead;
// TODO: Structure incomplete!!!
} VDM_CONSOLE_RECORD, *PVDM_CONSOLE_RECORD;