/*++ Copyright (c) 1998 Microsoft Corporation Module Name: csrdosdv.c Abstract: This module implements functions that are used by the DefineDosDevice API to communicate with csrss. Author: Michael Zoran (mzoran) 21-Jun-1998 Revision History: --*/ #include "basedll.h" NTSTATUS CsrBasepDefineDosDevice( DWORD dwFlags, PUNICODE_STRING pDeviceName, PUNICODE_STRING pTargetPath ) { #if defined(BUILD_WOW6432) return NtWow64CsrBasepDefineDosDevice(dwFlags, pDeviceName, pTargetPath ); #else BASE_API_MSG m; PBASE_DEFINEDOSDEVICE_MSG a = &m.u.DefineDosDeviceApi; PCSR_CAPTURE_HEADER p; ULONG PointerCount, n; if (0 == pTargetPath->MaximumLength) { PointerCount = 1; n = pDeviceName->MaximumLength; } else { PointerCount = 2; n = pDeviceName->MaximumLength + pTargetPath->MaximumLength; } p = CsrAllocateCaptureBuffer( PointerCount, n ); if (p == NULL) { return STATUS_NO_MEMORY; } a->Flags = dwFlags; a->DeviceName.MaximumLength = (USHORT)CsrAllocateMessagePointer( p, pDeviceName->MaximumLength, (PVOID *)&a->DeviceName.Buffer ); RtlUpcaseUnicodeString( &a->DeviceName, pDeviceName, FALSE ); if (pTargetPath->Length != 0) { a->TargetPath.MaximumLength = (USHORT)CsrAllocateMessagePointer( p, pTargetPath->MaximumLength, (PVOID *)&a->TargetPath.Buffer ); RtlCopyUnicodeString( &a->TargetPath, pTargetPath ); } else { RtlInitUnicodeString( &a->TargetPath, NULL ); } CsrClientCallServer( (PCSR_API_MSG)&m, p, CSR_MAKE_API_NUMBER( BASESRV_SERVERDLL_INDEX, BasepDefineDosDevice ), sizeof( *a ) ); CsrFreeCaptureBuffer( p ); return m.ReturnValue; #endif }