/* INCLUDES *****************************************************************/
#include <limits.h>
-#include <ddk/ntddk.h>
+#define NTOS_MODE_KERNEL
+#include <ntos.h>
#include <internal/ob.h>
#define NDEBUG
ObjectAttributes,
DeviceName);
- Status = ObCreateObject(SymbolicLinkHandle,
+ Status = ObRosCreateObject(SymbolicLinkHandle,
DesiredAccess,
ObjectAttributes,
ObSymbolicLinkType,
NULL);
if (!NT_SUCCESS(Status))
{
- return(Status);
+ return Status;
}
- RtlCopyUnicodeString(LinkTarget,
- SymlinkObject->Target.ObjectName);
if (ReturnedLength != NULL)
{
- *ReturnedLength = SymlinkObject->Target.Length;
+ *ReturnedLength = (ULONG)SymlinkObject->TargetName.Length + sizeof(WCHAR);
+ }
+
+ if (LinkTarget->MaximumLength >= SymlinkObject->TargetName.Length + sizeof(WCHAR))
+ {
+ RtlCopyUnicodeString(LinkTarget,
+ &SymlinkObject->TargetName);
+ Status = STATUS_SUCCESS;
}
+ else
+ {
+ Status = STATUS_BUFFER_TOO_SMALL;
+ }
+
ObDereferenceObject(SymlinkObject);
- return(STATUS_SUCCESS);
+ return Status;
}
/* EOF */