-/*
+/* $Id: symlink.c,v 1.9 1999/08/29 06:59:08 ea Exp $
+ *
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/io/symlink.c
/* GLOBALS ******************************************************************/
-typedef struct
+typedef
+struct
{
- CSHORT Type;
- CSHORT Size;
- UNICODE_STRING TargetName;
- OBJECT_ATTRIBUTES Target;
+ CSHORT Type;
+ CSHORT Size;
+ UNICODE_STRING TargetName;
+ OBJECT_ATTRIBUTES Target;
+
} SYMLNK_OBJECT, *PSYMLNK_OBJECT;
-POBJECT_TYPE IoSymbolicLinkType = NULL;
+
+POBJECT_TYPE
+IoSymbolicLinkType = NULL;
/* FUNCTIONS *****************************************************************/
-NTSTATUS IopCreateSymbolicLink(PVOID Object,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_ATTRIBUTES ObjectAttributes)
+
+/**********************************************************************
+ * NAME INTERNAL
+ * IopCreateSymbolicLink
+ *
+ * DESCRIPTION
+ *
+ * ARGUMENTS
+ *
+ * RETURNN VALUE
+ * Status.
+ *
+ * REVISIONS
+ */
+NTSTATUS
+IopCreateSymbolicLink (
+ PVOID Object,
+ PVOID Parent,
+ PWSTR RemainingPath,
+ POBJECT_ATTRIBUTES ObjectAttributes
+ )
{
- if (Parent != NULL && RemainingPath != NULL)
- {
- ObAddEntryDirectory(Parent, Object, RemainingPath+1);
- }
- return(STATUS_SUCCESS);
+ if ( (Parent != NULL)
+ && (RemainingPath != NULL)
+ )
+ {
+ ObAddEntryDirectory(
+ Parent,
+ Object,
+ RemainingPath + 1
+ );
+ }
+ return STATUS_SUCCESS;
}
-PVOID IopParseSymbolicLink(PVOID Object,
- PWSTR* RemainingPath)
+
+/**********************************************************************
+ * NAME INTERNAL
+ * IopParseSymbolicLink
+ *
+ * DESCRIPTION
+ *
+ * ARGUMENTS
+ *
+ * RETURNN VALUE
+ *
+ * REVISIONS
+ */
+PVOID
+IopParseSymbolicLink (
+ PVOID Object,
+ PWSTR * RemainingPath
+ )
{
- NTSTATUS Status;
- PSYMLNK_OBJECT SymlinkObject = (PSYMLNK_OBJECT)Object;
- PVOID ReturnedObject;
+ NTSTATUS Status;
+ PSYMLNK_OBJECT SymlinkObject = (PSYMLNK_OBJECT) Object;
+ PVOID ReturnedObject;
- Status = ObReferenceObjectByName(SymlinkObject->Target.ObjectName,
- 0,
- NULL,
- STANDARD_RIGHTS_REQUIRED,
- NULL,
- UserMode,
- NULL,
- &ReturnedObject);
- if (NT_SUCCESS(Status))
- {
- return(ReturnedObject);
- }
- return(NULL);
+ Status = ObReferenceObjectByName(
+ SymlinkObject->Target.ObjectName,
+ 0,
+ NULL,
+ STANDARD_RIGHTS_REQUIRED,
+ NULL,
+ UserMode,
+ NULL,
+ & ReturnedObject
+ );
+ if (NT_SUCCESS(Status))
+ {
+ return ReturnedObject;
+ }
+ return NULL;
}
-VOID IoInitSymbolicLinkImplementation(VOID)
+
+/**********************************************************************
+ * NAME INTERNAL
+ * IoInitSymbolicLinkImplementation
+ *
+ * DESCRIPTION
+ *
+ * ARGUMENTS
+ * None.
+ *
+ * RETURNN VALUE
+ * None.
+ *
+ * REVISIONS
+ */
+VOID
+IoInitSymbolicLinkImplementation (VOID)
{
- ANSI_STRING AnsiString;
+ ANSI_STRING AnsiString;
- IoSymbolicLinkType = ExAllocatePool(NonPagedPool,sizeof(OBJECT_TYPE));
+ IoSymbolicLinkType = ExAllocatePool(
+ NonPagedPool,
+ sizeof (OBJECT_TYPE)
+ );
- IoSymbolicLinkType->TotalObjects = 0;
- IoSymbolicLinkType->TotalHandles = 0;
- IoSymbolicLinkType->MaxObjects = ULONG_MAX;
- IoSymbolicLinkType->MaxHandles = ULONG_MAX;
- IoSymbolicLinkType->PagedPoolCharge = 0;
- IoSymbolicLinkType->NonpagedPoolCharge = sizeof(SYMLNK_OBJECT);
- IoSymbolicLinkType->Dump = NULL;
- IoSymbolicLinkType->Open = NULL;
- IoSymbolicLinkType->Close = NULL;
- IoSymbolicLinkType->Delete = NULL;
- IoSymbolicLinkType->Parse = IopParseSymbolicLink;
- IoSymbolicLinkType->Security = NULL;
- IoSymbolicLinkType->QueryName = NULL;
- IoSymbolicLinkType->OkayToClose = NULL;
- IoSymbolicLinkType->Create = IopCreateSymbolicLink;
+ IoSymbolicLinkType->TotalObjects = 0;
+ IoSymbolicLinkType->TotalHandles = 0;
+ IoSymbolicLinkType->MaxObjects = ULONG_MAX;
+ IoSymbolicLinkType->MaxHandles = ULONG_MAX;
+ IoSymbolicLinkType->PagedPoolCharge = 0;
+ IoSymbolicLinkType->NonpagedPoolCharge = sizeof (SYMLNK_OBJECT);
+ IoSymbolicLinkType->Dump = NULL;
+ IoSymbolicLinkType->Open = NULL;
+ IoSymbolicLinkType->Close = NULL;
+ IoSymbolicLinkType->Delete = NULL;
+ IoSymbolicLinkType->Parse = IopParseSymbolicLink;
+ IoSymbolicLinkType->Security = NULL;
+ IoSymbolicLinkType->QueryName = NULL;
+ IoSymbolicLinkType->OkayToClose = NULL;
+ IoSymbolicLinkType->Create = IopCreateSymbolicLink;
- RtlInitAnsiString(&AnsiString,"Symbolic Link");
- RtlAnsiStringToUnicodeString(&IoSymbolicLinkType->TypeName,
- &AnsiString,TRUE);
+ RtlInitAnsiString(
+ & AnsiString,
+ "Symbolic Link"
+ );
+ RtlAnsiStringToUnicodeString(
+ & IoSymbolicLinkType->TypeName,
+ & AnsiString,
+ TRUE
+ );
}
+/**********************************************************************
+ * NAME EXPORTED
+ * NtOpenSymbolicLinkObject
+ *
+ * DESCRIPTION
+ *
+ * ARGUMENTS
+ *
+ * RETURN VALUE
+ *
+ * REVISIONS
+ *
+ */
NTSTATUS
+STDCALL
NtOpenSymbolicLinkObject (
OUT PHANDLE LinkHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes
)
{
- NTSTATUS Status;
- PVOID Object;
-
- Status = ObReferenceObjectByName(ObjectAttributes->ObjectName,
- ObjectAttributes->Attributes,
- NULL,
- DesiredAccess,
- NULL,
- UserMode,
- NULL,
- &Object);
- if (!NT_SUCCESS(Status))
- {
- return(Status);
- }
+ NTSTATUS Status;
+ PVOID Object;
+
+ Status = ObReferenceObjectByName(
+ ObjectAttributes->ObjectName,
+ ObjectAttributes->Attributes,
+ NULL,
+ DesiredAccess,
+ NULL,
+ UserMode,
+ NULL,
+ & Object
+ );
+ if (!NT_SUCCESS(Status))
+ {
+ return Status;
+ }
- Status = ObCreateHandle(PsGetCurrentProcess(),
- Object,
- DesiredAccess,
- FALSE,
- LinkHandle);
- if (!NT_SUCCESS(Status))
- {
- return(Status);
- }
+ Status = ObCreateHandle(
+ PsGetCurrentProcess(),
+ Object,
+ DesiredAccess,
+ FALSE,
+ LinkHandle
+ );
+ if (!NT_SUCCESS(Status))
+ {
+ return Status;
+ }
- return(STATUS_SUCCESS);
+ return STATUS_SUCCESS;
}
+/**********************************************************************
+ * NAME EXPORTED
+ * NtQuerySymbolicLinkObject
+ *
+ * DESCRIPTION
+ *
+ * ARGUMENTS
+ *
+ * RETURN VALUE
+ *
+ * REVISIONS
+ *
+ */
NTSTATUS
+STDCALL
NtQuerySymbolicLinkObject (
IN HANDLE LinkHandle,
IN OUT PUNICODE_STRING LinkTarget,
OUT PULONG ReturnedLength OPTIONAL
)
{
- PSYMLNK_OBJECT SymlinkObject;
- NTSTATUS Status;
+ PSYMLNK_OBJECT SymlinkObject;
+ NTSTATUS Status;
- Status = ObReferenceObjectByHandle(LinkHandle,
- SYMBOLIC_LINK_QUERY,
- IoSymbolicLinkType,
- UserMode,
- (PVOID*)&SymlinkObject,
- NULL);
- if (Status != STATUS_SUCCESS)
- {
- return(Status);
- }
+ Status = ObReferenceObjectByHandle(
+ LinkHandle,
+ SYMBOLIC_LINK_QUERY,
+ IoSymbolicLinkType,
+ UserMode,
+ (PVOID *) & SymlinkObject,
+ NULL
+ );
+ if (Status != STATUS_SUCCESS)
+ {
+ return Status;
+ }
- RtlCopyUnicodeString(LinkTarget,SymlinkObject->Target.ObjectName);
- if (ReturnedLength!=NULL)
- {
- *ReturnedLength=SymlinkObject->Target.Length;
- }
- ObDereferenceObject(SymlinkObject);
- return(STATUS_SUCCESS);
+ RtlCopyUnicodeString(
+ LinkTarget,
+ SymlinkObject->Target.ObjectName
+ );
+ if (ReturnedLength != NULL)
+ {
+ *ReturnedLength = SymlinkObject->Target.Length;
+ }
+ ObDereferenceObject(SymlinkObject);
+
+ return STATUS_SUCCESS;
}
-NTSTATUS IoCreateUnprotectedSymbolicLink(PUNICODE_STRING SymbolicLinkName,
- PUNICODE_STRING DeviceName)
+
+/**********************************************************************
+ * NAME EXPORTED
+ * IoCreateUnprotectedSymbolicLink
+ *
+ * DESCRIPTION
+ *
+ * ARGUMENTS
+ *
+ * RETURN VALUE
+ *
+ * REVISIONS
+ *
+ */
+NTSTATUS
+STDCALL
+IoCreateUnprotectedSymbolicLink (
+ PUNICODE_STRING SymbolicLinkName,
+ PUNICODE_STRING DeviceName
+ )
{
- return(IoCreateSymbolicLink(SymbolicLinkName,DeviceName));
+ return IoCreateSymbolicLink(
+ SymbolicLinkName,
+ DeviceName
+ );
}
-NTSTATUS IoCreateSymbolicLink(PUNICODE_STRING SymbolicLinkName,
- PUNICODE_STRING DeviceName)
+
+/**********************************************************************
+ * NAME EXPORTED
+ * IoCreateSymbolicLink
+ *
+ * DESCRIPTION
+ *
+ * ARGUMENTS
+ *
+ * RETURN VALUE
+ *
+ * REVISIONS
+ *
+ */
+NTSTATUS
+STDCALL
+IoCreateSymbolicLink (
+ PUNICODE_STRING SymbolicLinkName,
+ PUNICODE_STRING DeviceName
+ )
{
- OBJECT_ATTRIBUTES ObjectAttributes;
- HANDLE SymbolicLinkHandle;
- PSYMLNK_OBJECT SymbolicLink;
+ OBJECT_ATTRIBUTES ObjectAttributes;
+ HANDLE SymbolicLinkHandle;
+ PSYMLNK_OBJECT SymbolicLink;
- assert_irql(PASSIVE_LEVEL);
+ assert_irql(PASSIVE_LEVEL);
- DPRINT("IoCreateSymbolicLink(SymbolicLinkName %w, DeviceName %w)\n",
- SymbolicLinkName->Buffer,DeviceName->Buffer);
+ DPRINT(
+ "IoCreateSymbolicLink(SymbolicLinkName %w, DeviceName %w)\n",
+ SymbolicLinkName->Buffer,
+ DeviceName->Buffer
+ );
- InitializeObjectAttributes(&ObjectAttributes,SymbolicLinkName,0,NULL,NULL);
- SymbolicLink = ObCreateObject(&SymbolicLinkHandle,
- SYMBOLIC_LINK_ALL_ACCESS,
- &ObjectAttributes,
- IoSymbolicLinkType);
- if (SymbolicLink == NULL)
- {
- return(STATUS_UNSUCCESSFUL);
- }
+ InitializeObjectAttributes(
+ & ObjectAttributes,
+ SymbolicLinkName,
+ 0,
+ NULL,
+ NULL
+ );
+ SymbolicLink = ObCreateObject(
+ & SymbolicLinkHandle,
+ SYMBOLIC_LINK_ALL_ACCESS,
+ & ObjectAttributes,
+ IoSymbolicLinkType
+ );
+ if (SymbolicLink == NULL)
+ {
+ return STATUS_UNSUCCESSFUL;
+ }
- ZwClose(SymbolicLinkHandle);
- SymbolicLink->TargetName.Length = 0;
- SymbolicLink->TargetName.MaximumLength =
- ((wcslen(DeviceName->Buffer) + 1) * sizeof(WCHAR));
- SymbolicLink->TargetName.Buffer = ExAllocatePool(NonPagedPool,
- SymbolicLink->TargetName.MaximumLength);
- RtlCopyUnicodeString(&(SymbolicLink->TargetName), DeviceName);
- DPRINT("DeviceName %w\n", SymbolicLink->TargetName.Buffer);
- InitializeObjectAttributes(&(SymbolicLink->Target),
- &(SymbolicLink->TargetName),0,NULL,NULL);
- DPRINT("%s() = STATUS_SUCCESS\n",__FUNCTION__);
- return(STATUS_SUCCESS);
+ ZwClose(SymbolicLinkHandle);
+
+ SymbolicLink->TargetName.Length = 0;
+ SymbolicLink->TargetName.MaximumLength =
+ ((wcslen(DeviceName->Buffer) + 1) * sizeof(WCHAR));
+ SymbolicLink->TargetName.Buffer =
+ ExAllocatePool(
+ NonPagedPool,
+ SymbolicLink->TargetName.MaximumLength
+ );
+ RtlCopyUnicodeString(
+ & (SymbolicLink->TargetName),
+ DeviceName
+ );
+
+ DPRINT("DeviceName %w\n", SymbolicLink->TargetName.Buffer);
+
+ InitializeObjectAttributes(
+ & (SymbolicLink->Target),
+ & (SymbolicLink->TargetName),
+ 0,
+ NULL,
+ NULL
+ );
+
+ DPRINT("%s() = STATUS_SUCCESS\n",__FUNCTION__);
+
+ return STATUS_SUCCESS;
}
+/**********************************************************************
+ * NAME EXPORTED
+ * IoDeleteSymbolicLink
+ *
+ * DESCRIPTION
+ *
+ * ARGUMENTS
+ *
+ * RETURN VALUE
+ *
+ * REVISIONS
+ *
+ */
NTSTATUS
-IoDeleteSymbolicLink(PUNICODE_STRING DeviceName)
+STDCALL
+IoDeleteSymbolicLink (
+ PUNICODE_STRING DeviceName
+ )
{
UNIMPLEMENTED;
}
+/**********************************************************************
+ * NAME (EXPORTED as Zw)
+ * NtCreateSymbolicLinkObject
+ *
+ * DESCRIPTION
+ *
+ * ARGUMENTS
+ *
+ * RETURN VALUE
+ *
+ * REVISIONS
+ *
+ */
NTSTATUS
STDCALL
NtCreateSymbolicLinkObject (
UNIMPLEMENTED;
}
+
+/* EOF */