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
|
||||
|
||||
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)
|
||||
|
||||
|
|
|
@ -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
|
||||
* REVISIONS
|
||||
* 2000-04-30 (ea)
|
||||
* Added directory enumeration.
|
||||
* (tested under nt4sp4/x86)
|
||||
*/
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
|
@ -10,35 +14,128 @@
|
|||
#include <stdio.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[])
|
||||
{
|
||||
UNICODE_STRING DirectoryNameW;
|
||||
UNICODE_STRING DirectoryNameA:
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
NTSTATUS Status;
|
||||
HANDLE DirectoryHandle;
|
||||
|
||||
RtlInitAnsiString(&DirectoryNameA, argv[1]);
|
||||
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);
|
||||
UNICODE_STRING DirectoryNameW;
|
||||
ANSI_STRING DirectoryNameA;
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
NTSTATUS Status;
|
||||
HANDLE DirectoryHandle;
|
||||
ULONG BytesReturned = 0;
|
||||
ULONG EntryCount = 0;
|
||||
|
||||
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