+ CurrentName [0] = L'\0';
+ wcscpy (CurrentName, DirectoryNameW->Buffer);
+ if (wcslen (CurrentName) > 1)
+ {
+ wcscat (CurrentName, L"\\");
+ }
+ wcscat (CurrentName, pDirectoryEntry->ObjectName.Buffer);
+ RtlInitUnicodeString (& CurrentDirectory, CurrentName);
+ ListDirectory (& CurrentDirectory, Recurse);
+ }
+ ++ pDirectoryEntry;
+ }
+ }
+ return (TRUE);
+}
+
+
+int main(int argc, char* argv[])
+{
+ WCHAR DirectoryNameW [MAX_PATH];
+ UNICODE_STRING DirectoryName;
+ BOOL Recurse = FALSE;
+
+ /*
+ * Check user arguments.
+ */
+ switch (argc)
+ {
+ case 2:
+ RawAszUsz (argv[1], DirectoryNameW);
+ break;
+ case 3:
+ if (strcmp (argv[1], "-r"))
+ {
+ fprintf (
+ stderr,
+ "%s: unknown option '%s'.\n",
+ argv [0], argv[1]
+ );
+ return EXIT_FAILURE;
+ }
+ RawAszUsz (argv[2], DirectoryNameW);
+ Recurse = TRUE;
+ break;
+ default:
+ fprintf (
+ stderr,
+ "\nUsage: %s [-r] directory\n\n"
+ " -r recurse\n"
+ " directory a directory name in the system namespace\n\n",
+ argv [0]
+ );
+ return EXIT_FAILURE;
+ }
+ /*
+ * List the directory.
+ */
+ RtlInitUnicodeString (& DirectoryName, DirectoryNameW);
+ return (FALSE == ListDirectory (& DirectoryName, Recurse))
+ ? EXIT_FAILURE
+ : EXIT_SUCCESS;