b8561d77ed1ee9790b5a230261734ed81f11084b
[reactos.git] / base / setup / usetup / drivesup.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS text-mode setup
4 * FILE: base/setup/usetup/drivesup.c
5 * PURPOSE: Drive support functions
6 * PROGRAMMER:
7 */
8
9 /* INCLUDES *****************************************************************/
10
11 #include "usetup.h"
12
13 #define NDEBUG
14 #include <debug.h>
15
16 /* FUNCTIONS ****************************************************************/
17
18 NTSTATUS
19 GetSourcePaths(
20 OUT PUNICODE_STRING SourcePath,
21 OUT PUNICODE_STRING SourceRootPath,
22 OUT PUNICODE_STRING SourceRootDir)
23 {
24 NTSTATUS Status;
25 OBJECT_ATTRIBUTES ObjectAttributes;
26 UNICODE_STRING LinkName = RTL_CONSTANT_STRING(L"\\SystemRoot");
27 UNICODE_STRING SourceName;
28 WCHAR SourceBuffer[MAX_PATH] = L"";
29 HANDLE Handle;
30 ULONG Length;
31 PWCHAR Ptr;
32
33 InitializeObjectAttributes(&ObjectAttributes,
34 &LinkName,
35 OBJ_CASE_INSENSITIVE,
36 NULL,
37 NULL);
38
39 Status = NtOpenSymbolicLinkObject(&Handle,
40 SYMBOLIC_LINK_ALL_ACCESS,
41 &ObjectAttributes);
42 if (!NT_SUCCESS(Status))
43 return Status;
44
45 RtlInitEmptyUnicodeString(&SourceName, SourceBuffer, sizeof(SourceBuffer));
46
47 Status = NtQuerySymbolicLinkObject(Handle,
48 &SourceName,
49 &Length);
50 NtClose(Handle);
51
52 if (!NT_SUCCESS(Status))
53 return Status;
54
55 RtlCreateUnicodeString(SourcePath,
56 SourceName.Buffer);
57
58 /* Strip trailing directory */
59 Ptr = wcsrchr(SourceName.Buffer, OBJ_NAME_PATH_SEPARATOR);
60 if (Ptr)
61 {
62 RtlCreateUnicodeString(SourceRootDir, Ptr);
63 *Ptr = UNICODE_NULL;
64 }
65 else
66 {
67 RtlCreateUnicodeString(SourceRootDir, L"");
68 }
69
70 RtlCreateUnicodeString(SourceRootPath,
71 SourceName.Buffer);
72
73 return STATUS_SUCCESS;
74 }
75
76 /* EOF */