WindowsXP-SP1/base/fs/remotefs/dfs/tools/dfsadmin/set.c
2020-09-30 16:53:49 +02:00

99 lines
2.4 KiB
C

#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <shellapi.h>
#include "..\..\lib\dfsgram\dfsobjectdef.h"
#include <dfsadmin.h>
DFSSTATUS
SetTarget(
LPWSTR LinkOrRoot,
PTARGET_DEF pTarget,
BOOLEAN FirstTarget)
{
DFSSTATUS Status;
if (IsInScript(pTarget) && IsInNameSpace(pTarget))
{
Status = ERROR_SUCCESS;
}
else if (IsInScript(pTarget))
{
Status = AddNewTarget( LinkOrRoot, pTarget, FirstTarget);
}
else if (IsInNameSpace(pTarget))
{
Status = DeleteTarget( LinkOrRoot, pTarget );
// printf("Delete Target Status for %wS, %wS %x\n", LinkOrRoot, pTarget->Name, Status);
}
else
{
printf("SetTarget: Target %wS has error!\n", pTarget->Name);
Status = ERROR_GEN_FAILURE;
}
return Status;
}
DFSSTATUS
SetLink(
LPWSTR RootNameString,
PLINK_DEF pLink)
{
DFSSTATUS Status = ERROR_SUCCESS;
DFSSTATUS TargetStatus = ERROR_SUCCESS;
PTARGET_DEF pTarget;
UNICODE_STRING LinkName;
BOOLEAN FirstTarget = FALSE;
if (!IsObjectInScript(pLink))
{
if (IsObjectInNameSpace(pLink))
{
Status = DeleteLink( RootNameString, pLink);
}
else
{
printf("Set Link error! \n");
Status = ERROR_GEN_FAILURE;
}
}
else {
if (!IsObjectInNameSpace(pLink))
{
AddLinks++;
FirstTarget = TRUE;
}
Status = DfsCreateUnicodePathString(&LinkName, FALSE, RootNameString, pLink->LinkObjectName);
if (Status == ERROR_SUCCESS)
{
for (pTarget = pLink->LinkObjectTargets; pTarget != NULL; pTarget = pTarget->NextTarget)
{
TargetStatus = SetTarget(LinkName.Buffer, pTarget, FirstTarget);
if (TargetStatus != ERROR_SUCCESS)
{
Status = ERROR_GEN_FAILURE;
}
FirstTarget = FALSE;
}
if (Status == ERROR_SUCCESS)
{
Status = UpdateLinkMetaInformation( &LinkName, pLink );
}
DfsFreeUnicodeString(&LinkName);
}
}
return Status;
}