Reactos
at master 125 lines 1.9 kB view raw
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 23static const LPWSTR error_prefix = L"lsdd: "; 24 25static char SymbolicLinks [LINKS_SIZE]; 26static char DosDeviceName [DEVICE_SIZE]; 27 28static char DeviceNames [DEVICE_SIZE]; 29static char DeviceName [DEVICE_SIZE]; 30 31 32BOOL 33WINAPI 34GetNextString ( 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 57int 58main (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 */