NTSTATUS RtlCliSetCurrentDirectory(PCHAR Directory) { WCHAR buf[MAX_PATH]; UNICODE_STRING us; if (NULL == Directory) { return STATUS_UNSUCCESSFUL; } // Full path contains at least two symbols, the second is ':' if (strnlen(Directory, MAX_PATH) >= 2 && Directory[1] == ':') { RtlCreateUnicodeStringFromAsciiz(&us, Directory); RtlSetCurrentDirectory_U(&us); RtlFreeUnicodeString(&us); return STATUS_SUCCESS; } GetFullPath(Directory, buf, TRUE); RtlInitUnicodeString(&us, buf); RtlSetCurrentDirectory_U(&us); RtlFreeUnicodeString(&us); return STATUS_SUCCESS; }
/* * @implemented */ BOOL WINAPI SetCurrentDirectoryW ( LPCWSTR lpPathName ) { UNICODE_STRING UnicodeString; NTSTATUS Status; RtlInitUnicodeString (&UnicodeString, lpPathName); Status = RtlSetCurrentDirectory_U (&UnicodeString); if (!NT_SUCCESS(Status)) { BaseSetLastNTError (Status); return FALSE; } return TRUE; }