MU_TEST(LwPrintf, LwPrintfString_unicode_string) { char * szFormat = "%wZ"; char szOutput[10] = {0}; char szExpectedOutput[] = {'U','S',0}; size_t scchWrote = 0; UNICODE_STRING us; int error = 0; MU_ASSERT(0 == LwRtlUnicodeStringAllocateFromCString(&us, "US")); error = LwPrintfString( szOutput, sizeof(szOutput)/sizeof(szOutput[0]), &scchWrote, szFormat, &us); MU_ASSERT(!strcmp(szOutput, szExpectedOutput)); MU_ASSERT(error == 0); MU_ASSERT(scchWrote == us.Length/2); }
MU_TEST(LwPrintf, LwPrintfW16StringW_unicode_string) { wchar_t* wszFormat = L"%wZ"; wchar16_t wszOutput[10] = {0}; wchar16_t wszExpectedOutput[] = {'U','S', 0}; size_t scchWrote = 0; UNICODE_STRING us; int error = 0; MU_ASSERT(0 == LwRtlUnicodeStringAllocateFromCString(&us, "US")); error = LwPrintfW16StringW( wszOutput, sizeof(wszOutput)/sizeof(wszOutput[0]), &scchWrote, wszFormat, &us); MU_ASSERT(!wc16scmp(wszOutput, wszExpectedOutput)); MU_ASSERT(error == 0); MU_ASSERT(scchWrote == us.Length/2); }
NTSTATUS LwioRemoteOpenFile( IN PCSTR pszFileName, IN ULONG ulDesiredAccess, IN ULONG ulShareAccess, IN ULONG ulCreateDisposition, IN ULONG ulCreateOptions, OUT PIO_FILE_HANDLE phFile ) { NTSTATUS status = STATUS_SUCCESS; IO_FILE_NAME filename = {0}; IO_FILE_HANDLE handle = NULL; IO_STATUS_BLOCK ioStatus ; PSTR pszRemoteFileName = NULL; BAIL_ON_NULL_POINTER(pszFileName); status = LwRtlCStringAllocatePrintf( &pszRemoteFileName, "/rdr%s", !strncmp(pszFileName, "//", sizeof("//")-1) ? pszFileName+1 : pszFileName); BAIL_ON_NT_STATUS(status); status = LwRtlUnicodeStringAllocateFromCString( &filename.Name, pszRemoteFileName); BAIL_ON_NT_STATUS(status); status = LwNtCreateFile( &handle, /* File handle */ NULL, /* Async control block */ &ioStatus, /* IO status block */ &filename, /* Filename */ NULL, /* Security descriptor */ NULL, /* Security QOS */ ulDesiredAccess, /* Desired access mask */ 0, /* Allocation size */ 0, /* File attributes */ ulShareAccess, /* Share access */ ulCreateDisposition, /* Create disposition */ ulCreateOptions, /* Create options */ NULL, /* EA buffer */ 0, /* EA length */ NULL, /* ECP list */ NULL); BAIL_ON_NT_STATUS(status); *phFile = handle; cleanup: RTL_FREE(&pszRemoteFileName); return status; error: *phFile = NULL; goto cleanup; }