mirror of
https://github.com/reactos/reactos.git
synced 2024-10-04 08:25:53 +00:00
objdir made compilable.
svn path=/trunk/; revision=1141
This commit is contained in:
parent
32ea00da50
commit
fdf480d262
|
@ -1,13 +1,17 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
OBJECTS= objdir.o
|
OBJECTS= ../common/crt0.o objdir.o
|
||||||
|
|
||||||
|
|
||||||
PROGS= objdir.exe
|
PROGS= objdir.exe
|
||||||
|
|
||||||
BASE_CFLAGS = -I../../include
|
BASE_CFLAGS = -I../../include
|
||||||
LIBS = ../../lib/ntdll/ntdll.a
|
LIB_BASE=../../lib
|
||||||
|
LIBS = \
|
||||||
|
$(LIB_BASE)/ntdll/ntdll.a \
|
||||||
|
$(LIB_BASE)/kernel32/kernel32.a \
|
||||||
|
$(LIB_BASE)/crtdll/crtdll.a
|
||||||
|
|
||||||
all: $(PROGS)
|
all: $(PROGS)
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
/* $Id: objdir.c,v 1.1 2000/03/26 22:00:06 dwelch Exp $
|
/* $Id: objdir.c,v 1.2 2000/05/01 13:53:43 ea Exp $
|
||||||
*
|
*
|
||||||
* DESCRIPTION: Simple LPC Server
|
* DESCRIPTION: Object Manager Simple Explorer
|
||||||
* PROGRAMMER: David Welch
|
* PROGRAMMER: David Welch
|
||||||
|
* REVISIONS
|
||||||
|
* 2000-04-30 (ea)
|
||||||
|
* Added directory enumeration.
|
||||||
|
* (tested under nt4sp4/x86)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <ddk/ntddk.h>
|
#include <ddk/ntddk.h>
|
||||||
|
@ -10,35 +14,128 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#define MAX_TYPE 64
|
||||||
|
|
||||||
|
typedef
|
||||||
|
struct _DIRECTORY_ENTRY_HEADER
|
||||||
|
{
|
||||||
|
UNICODE_STRING Name;
|
||||||
|
UNICODE_STRING Type;
|
||||||
|
|
||||||
|
} DIRECTORY_ENTRY_HEADER;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
DIRECTORY_ENTRY_HEADER Entry;
|
||||||
|
WCHAR Buffer [MAX_PATH + MAX_TYPE + 2];
|
||||||
|
|
||||||
|
} DirectoryEntry;
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
UNICODE_STRING DirectoryNameW;
|
UNICODE_STRING DirectoryNameW;
|
||||||
UNICODE_STRING DirectoryNameA:
|
ANSI_STRING DirectoryNameA;
|
||||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
HANDLE DirectoryHandle;
|
HANDLE DirectoryHandle;
|
||||||
|
ULONG BytesReturned = 0;
|
||||||
RtlInitAnsiString(&DirectoryNameA, argv[1]);
|
ULONG EntryCount = 0;
|
||||||
RtlAnsiStringToUnicodeString(&DirectoryNameW,
|
|
||||||
&DirectoryNameA,
|
|
||||||
TRUE);
|
|
||||||
InitializeObjectAttributes(&ObjectAttributes,
|
|
||||||
&DirectoryNameW,
|
|
||||||
0,
|
|
||||||
NULL,
|
|
||||||
NULL);
|
|
||||||
Status = NtOpenDirectoryObject(&DirectoryHandle,
|
|
||||||
0,
|
|
||||||
&ObjectAttributes);
|
|
||||||
if (!NT_SUCCESS(Status))
|
|
||||||
{
|
|
||||||
printf("Failed to open directory object (Status%x)\n", Status);
|
|
||||||
return(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
NtClose(DirectoryHandle);
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
/*
|
||||||
|
* Check user arguments.
|
||||||
|
*/
|
||||||
|
if (2 != argc)
|
||||||
|
{
|
||||||
|
fprintf (
|
||||||
|
stderr,
|
||||||
|
"Usage: %s directory\n\n"
|
||||||
|
" directory a directory name in the system namespace\n",
|
||||||
|
argv [0]
|
||||||
|
);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Prepare parameters for next call.
|
||||||
|
*/
|
||||||
|
RtlInitAnsiString (
|
||||||
|
& DirectoryNameA,
|
||||||
|
argv [1]
|
||||||
|
);
|
||||||
|
RtlAnsiStringToUnicodeString (
|
||||||
|
& DirectoryNameW,
|
||||||
|
& DirectoryNameA,
|
||||||
|
TRUE
|
||||||
|
);
|
||||||
|
InitializeObjectAttributes (
|
||||||
|
& ObjectAttributes,
|
||||||
|
& DirectoryNameW,
|
||||||
|
0,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
/*
|
||||||
|
* Try opening the directory the
|
||||||
|
* user requested.
|
||||||
|
*/
|
||||||
|
Status = NtOpenDirectoryObject (
|
||||||
|
& DirectoryHandle,
|
||||||
|
DIRECTORY_QUERY,
|
||||||
|
& ObjectAttributes
|
||||||
|
);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
printf (
|
||||||
|
"Failed to open directory object (Status: %x)\n",
|
||||||
|
Status
|
||||||
|
);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Enumerate each item in the directory.
|
||||||
|
*/
|
||||||
|
Status = NtQueryDirectoryObject (
|
||||||
|
DirectoryHandle,
|
||||||
|
& DirectoryEntry,
|
||||||
|
sizeof DirectoryEntry,
|
||||||
|
TRUE,
|
||||||
|
TRUE,
|
||||||
|
& BytesReturned,
|
||||||
|
& EntryCount
|
||||||
|
);
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
printf (
|
||||||
|
"Failed to query directory object (Status: %x)\n",
|
||||||
|
Status
|
||||||
|
);
|
||||||
|
NtClose (DirectoryHandle);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
wprintf (L"%d entries:\n", EntryCount);
|
||||||
|
while (STATUS_NO_MORE_ENTRIES != Status)
|
||||||
|
{
|
||||||
|
wprintf (
|
||||||
|
L"%-16s %s\n",
|
||||||
|
DirectoryEntry.Entry.Type.Buffer,
|
||||||
|
DirectoryEntry.Entry.Name.Buffer
|
||||||
|
);
|
||||||
|
Status = NtQueryDirectoryObject (
|
||||||
|
DirectoryHandle,
|
||||||
|
& DirectoryEntry,
|
||||||
|
sizeof DirectoryEntry,
|
||||||
|
TRUE,
|
||||||
|
FALSE,
|
||||||
|
& BytesReturned,
|
||||||
|
& EntryCount
|
||||||
|
);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Free any resource.
|
||||||
|
*/
|
||||||
|
NtClose (DirectoryHandle);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue