Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

130 lines
3.3 KiB

#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 "dfsheader.h"
#include "dfsmisc.h"
#include "dfsprefix.h"
#include "..\..\lib\dfsgram\dfsobjectdef.h"
#include "DfsAdmin.h"
DFSSTATUS
DfsView (
LPWSTR RootName,
FILE *Out )
{
LPBYTE pBuffer = NULL;
DWORD ResumeHandle = 0;
DWORD EntriesRead = 0;
DWORD PrefMaxLen = -1;
DWORD Level = 4;
DFSSTATUS Status;
PDFS_INFO_4 pCurrentBuffer;
DWORD i;
if (DebugOut)
{
fwprintf(DebugOut, L"Contacting %wS for enumeration \n", RootName);
}
Status = NetDfsEnum( RootName,
Level,
PrefMaxLen,
&pBuffer,
&EntriesRead,
&ResumeHandle);
if (DebugOut)
{
fwprintf(DebugOut, L"Enumeration for %wS is complete %d entries\n",
RootName,
EntriesRead);
}
if (Status != ERROR_SUCCESS)
{
printf("Export: cannot enum %wS: error %x\n", RootName, Status);
}
else {
pCurrentBuffer = (PDFS_INFO_4)pBuffer;
for (i = 0; i < EntriesRead; i++)
{
DumpDfsInfo(i, Level, pCurrentBuffer, Out);
pCurrentBuffer++;
}
fwprintf(Out, L"END ROOT\n");
}
return Status;
}
DumpDfsInfo(
DWORD Entry,
DWORD Level,
PDFS_INFO_4 pBuf,
FILE *Out)
{
DWORD i;
PDFS_STORAGE_INFO pStorage;
UNICODE_STRING LinkName, ServerName, ShareName, Remains;
DFSSTATUS Status;
if (Level != 4) {
printf("Fix Dump DfsInfo for different levels\n");
return 0;
}
if (Entry == 0)
{
fwprintf(Out, L"ROOT %ws \n", pBuf->EntryPath);
for(i = 0, pStorage = pBuf->Storage;
i < pBuf->NumberOfStorages;
i++, pStorage = pBuf->Storage+i)
{
fwprintf(Out, L"\tTARGET \\\\%ws\\%ws\n",
pStorage->ServerName, pStorage->ShareName);
}
fwprintf(Out, L"\n");
}
else
{
RtlInitUnicodeString( &LinkName, pBuf->EntryPath);
Status = DfsGetPathComponents(&LinkName,
&ServerName,
&ShareName,
&Remains);
fwprintf(Out, L"\tLINK \"%ws\" ", Remains.Buffer);
if (pBuf->Comment && (pBuf->Comment[0] != 0))
{
printf("Comment is %ws\n", pBuf->Comment);
fwprintf(Out, L"\tCOMMENT \"%ws\" ", pBuf->Comment);
}
fwprintf(Out, L"\tSTATE %x ", pBuf->State);
if (pBuf->Timeout != 0)
{
fwprintf(Out, L"\tTIMEOUT %d ", pBuf->Timeout);
}
fwprintf(Out, L"\n");
for(i = 0, pStorage = pBuf->Storage;
i < pBuf->NumberOfStorages;
i++, pStorage = pBuf->Storage+i)
{
fwprintf(Out, L"\t\tTARGET \\\\%ws\\%ws",
pStorage->ServerName, pStorage->ShareName);
fwprintf(Out, L"\tSTATE %x \n", pStorage->State);
}
}
fwprintf(Out, L"\n");
return 0;
}