1 /*
2 * FILE : lsdd.c
3 * AUTHOR: Emanuele ALIBERTI
4 * DATE : 2000-08-04
5 * DESC : List DOS devices, i.e. symbolic links created
6 * in the \?? object manager's name space.
7 */
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <stdarg.h>
11
12 #include <windef.h>
13 #include <winbase.h>
14
15
16 #include <reactos/buildno.h>
17
18 #include "../win32err.h"
19
20 #define LINKS_SIZE 32768
21 #define DEVICE_SIZE 8192
22
23 static const LPWSTR error_prefix = L"lsdd: ";
24
25 static char SymbolicLinks [LINKS_SIZE];
26 static char DosDeviceName [DEVICE_SIZE];
27
28 static char DeviceNames [DEVICE_SIZE];
29 static char DeviceName [DEVICE_SIZE];
30
31
32 BOOL
33 WINAPI
GetNextString(char * BufferIn,char * BufferOut,char ** Next)34 GetNextString (
35 char * BufferIn,
36 char * BufferOut,
37 char ** Next
38 )
39 {
40 char * next = *Next;
41 char * w;
42
43 if ('\0' == *next) return FALSE;
44 for ( w = BufferOut;
45 ('\0' != *next);
46 next ++
47 )
48 {
49 *(w ++) = *next;
50 }
51 *w = '\0';
52 *Next = ++ next;
53 return TRUE;
54 }
55
56
57 int
main(int argc,char * argv[])58 main (int argc, char * argv [] )
59 {
60 printf (
61 "ReactOS/Win32 %s - List DOS Devices Utility\n"
62 "Written by E.Aliberti (%s)\n\n",
63 KERNEL_VERSION_STR,
64 __DATE__
65 );
66
67 if (0 != QueryDosDevice (
68 NULL, /* dump full directory */
69 SymbolicLinks,
70 sizeof SymbolicLinks
71 )
72 )
73 {
74 char * NextDosDevice = SymbolicLinks;
75 char * NextDevice;
76
77 while (TRUE == GetNextString (
78 SymbolicLinks,
79 DosDeviceName,
80 & NextDosDevice
81 )
82 )
83 {
84 printf ("%s\n", DosDeviceName);
85 if (0 != QueryDosDevice (
86 DosDeviceName,
87 DeviceNames,
88 sizeof DeviceNames
89 )
90 )
91 {
92 NextDevice = DeviceNames;
93 while (TRUE == GetNextString (
94 DeviceNames,
95 DeviceName,
96 & NextDevice
97 )
98 )
99 {
100 printf (" -> \"%s\"\n", DeviceName);
101 }
102 }
103 else
104 {
105 PrintWin32Error (
106 error_prefix,
107 GetLastError ()
108 );
109 }
110 printf ("\n");
111 }
112 }
113 else
114 {
115 PrintWin32Error (
116 error_prefix,
117 GetLastError ()
118 );
119 return EXIT_FAILURE;
120 }
121 return EXIT_SUCCESS;
122 }
123
124
125 /* EOF */
126