mirror of https://github.com/tongzx/nt5src
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.
459 lines
13 KiB
459 lines
13 KiB
|
|
#define DUMP // leave enabled...
|
|
|
|
#include "globals.h"
|
|
#include "switches.h"
|
|
#include <windows.h>
|
|
#include <windowsx.h>
|
|
#include <io.h>
|
|
#include <malloc.h>
|
|
#include <string.h>
|
|
|
|
#if DBG
|
|
void __cdecl dprintf(LPTSTR szFormat, ...) {
|
|
static TCHAR tmpStr[1024];
|
|
va_list marker;
|
|
|
|
va_start(marker, szFormat);
|
|
wvsprintf(tmpStr, szFormat, marker);
|
|
OutputDebugString(tmpStr);
|
|
va_end(marker);
|
|
|
|
} // dprintf
|
|
|
|
BOOL fDoEntireList = FALSE;
|
|
|
|
void DumpConvertList(CONVERT_LIST *pConvertList)
|
|
{
|
|
if (pConvertList)
|
|
{
|
|
dprintf(
|
|
TEXT("+++CONVERT_LIST(0x%08lx)"),
|
|
pConvertList
|
|
);
|
|
|
|
dprintf(
|
|
TEXT("\r\n\tnext = 0x%08lx")
|
|
TEXT("\r\n\tprev = 0x%08lx")
|
|
TEXT("\r\n\tSourceServ = 0x%08lx")
|
|
TEXT("\r\n\tFileServ = 0x%08lx")
|
|
TEXT("\r\n\tConvertOptions = 0x%08lx")
|
|
TEXT("\r\n\tFileOptions = 0x%08lx\r\n"),
|
|
pConvertList->next,
|
|
pConvertList->prev,
|
|
pConvertList->SourceServ,
|
|
pConvertList->FileServ,
|
|
pConvertList->ConvertOptions,
|
|
pConvertList->FileOptions
|
|
);
|
|
|
|
if (pConvertList->SourceServ)
|
|
DumpSourceServerBuffer(pConvertList->SourceServ);
|
|
|
|
if (pConvertList->FileServ)
|
|
DumpDestServerBuffer(pConvertList->FileServ);
|
|
|
|
if (fDoEntireList && pConvertList->next)
|
|
DumpConvertList(pConvertList->next);
|
|
|
|
dprintf(
|
|
TEXT("---CONVERT_LIST(0x%08lx)\r\n"),
|
|
pConvertList
|
|
);
|
|
}
|
|
else
|
|
dprintf(TEXT("Null pConvertList\r\n"));
|
|
|
|
} // DumpConvertList
|
|
|
|
|
|
void DumpDestServerBuffer(DEST_SERVER_BUFFER *pDestServerBuffer)
|
|
{
|
|
if (pDestServerBuffer)
|
|
{
|
|
dprintf(
|
|
TEXT("+++DEST_SERVER_BUFFER(0x%08lx)"),
|
|
pDestServerBuffer
|
|
);
|
|
|
|
dprintf(
|
|
TEXT("\r\n\tnext = 0x%08lx")
|
|
TEXT("\r\n\tprev = 0x%08lx")
|
|
TEXT("\r\n\tIndex = 0x%08lx")
|
|
TEXT("\r\n\tType = 0x%08lx")
|
|
TEXT("\r\n\tVerMaj = 0x%08lx")
|
|
TEXT("\r\n\tVerMin = 0x%08lx")
|
|
TEXT("\r\n\tLName = %s")
|
|
TEXT("\r\n\tName = %s")
|
|
TEXT("\r\n\tShareList = 0x%08lx")
|
|
TEXT("\r\n\tNumVShares = 0x%08lx")
|
|
TEXT("\r\n\tVShareStart = 0x%08lx")
|
|
TEXT("\r\n\tVShareEnd = 0x%08lx")
|
|
TEXT("\r\n\tUseCount = 0x%08lx")
|
|
TEXT("\r\n\tIsNTAS = 0x%08lx")
|
|
TEXT("\r\n\tIsFPNW = 0x%08lx")
|
|
TEXT("\r\n\tInDomain = 0x%08lx")
|
|
TEXT("\r\n\tDomain = 0x%08lx")
|
|
TEXT("\r\n\tDriveList = 0x%08lx\r\n"),
|
|
pDestServerBuffer->next,
|
|
pDestServerBuffer->prev,
|
|
pDestServerBuffer->Index,
|
|
pDestServerBuffer->Type,
|
|
pDestServerBuffer->VerMaj,
|
|
pDestServerBuffer->VerMin,
|
|
pDestServerBuffer->LName,
|
|
pDestServerBuffer->Name,
|
|
pDestServerBuffer->ShareList,
|
|
pDestServerBuffer->NumVShares,
|
|
pDestServerBuffer->VShareStart,
|
|
pDestServerBuffer->VShareEnd,
|
|
pDestServerBuffer->UseCount,
|
|
pDestServerBuffer->IsNTAS,
|
|
pDestServerBuffer->IsFPNW,
|
|
pDestServerBuffer->InDomain,
|
|
pDestServerBuffer->Domain,
|
|
pDestServerBuffer->DriveList
|
|
);
|
|
|
|
if (pDestServerBuffer->DriveList)
|
|
DumpDriveList(pDestServerBuffer->DriveList);
|
|
|
|
if (pDestServerBuffer->ShareList)
|
|
DumpShareList(pDestServerBuffer->ShareList);
|
|
|
|
if (pDestServerBuffer->VShareStart)
|
|
DumpVirtualShareBuffer(pDestServerBuffer->VShareStart);
|
|
|
|
if (pDestServerBuffer->Domain)
|
|
DumpDomainBuffer(pDestServerBuffer->Domain);
|
|
|
|
if (fDoEntireList && pDestServerBuffer->next)
|
|
DumpDestServerBuffer(pDestServerBuffer->next);
|
|
|
|
dprintf(
|
|
TEXT("---DEST_SERVER_BUFFER(0x%08lx)\r\n"),
|
|
pDestServerBuffer
|
|
);
|
|
}
|
|
else
|
|
dprintf(TEXT("Null pDestServerBuffer\r\n"));
|
|
|
|
} // DumpDestServerBuffer
|
|
|
|
|
|
void DumpSourceServerBuffer(SOURCE_SERVER_BUFFER *pSourceServerBuffer)
|
|
{
|
|
if (pSourceServerBuffer)
|
|
{
|
|
dprintf(
|
|
TEXT("+++SOURCE_SERVER_BUFFER(0x%08lx)"),
|
|
pSourceServerBuffer
|
|
);
|
|
|
|
dprintf(
|
|
TEXT("\r\n\tnext = 0x%08lx")
|
|
TEXT("\r\n\tprev = 0x%08lx")
|
|
TEXT("\r\n\tIndex = 0x%08lx")
|
|
TEXT("\r\n\tType = 0x%08lx")
|
|
TEXT("\r\n\tVerMaj = 0x%08lx")
|
|
TEXT("\r\n\tVerMin = 0x%08lx")
|
|
TEXT("\r\n\tLName = %s")
|
|
TEXT("\r\n\tName = %s")
|
|
TEXT("\r\n\tShareList = 0x%08lx\r\n"),
|
|
pSourceServerBuffer->next,
|
|
pSourceServerBuffer->prev,
|
|
pSourceServerBuffer->Index,
|
|
pSourceServerBuffer->Type,
|
|
pSourceServerBuffer->VerMaj,
|
|
pSourceServerBuffer->VerMin,
|
|
pSourceServerBuffer->LName,
|
|
pSourceServerBuffer->Name,
|
|
pSourceServerBuffer->ShareList
|
|
);
|
|
|
|
if (pSourceServerBuffer->ShareList)
|
|
DumpShareList(pSourceServerBuffer->ShareList);
|
|
|
|
if (fDoEntireList && pSourceServerBuffer->next)
|
|
DumpSourceServerBuffer(pSourceServerBuffer->next);
|
|
|
|
dprintf(
|
|
TEXT("---SOURCE_SERVER_BUFFER(0x%08lx)\r\n"),
|
|
pSourceServerBuffer
|
|
);
|
|
}
|
|
else
|
|
dprintf(TEXT("Null pSourceServerBuffer\r\n"));
|
|
|
|
} // DumpSourceServerBuffer
|
|
|
|
|
|
void DumpDomainBuffer(DOMAIN_BUFFER *pDomainBuffer)
|
|
{
|
|
if (pDomainBuffer)
|
|
{
|
|
dprintf(
|
|
TEXT("+++DOMAIN_BUFFER(0x%08lx)"),
|
|
pDomainBuffer
|
|
);
|
|
|
|
dprintf(
|
|
TEXT("\r\n\tnext = 0x%08lx")
|
|
TEXT("\r\n\tprev = 0x%08lx")
|
|
TEXT("\r\n\tIndex = 0x%08lx")
|
|
TEXT("\r\n\tName = %s")
|
|
TEXT("\r\n\tPDCName = %s")
|
|
TEXT("\r\n\tType = 0x%08lx")
|
|
TEXT("\r\n\tVerMaj = 0x%08lx")
|
|
TEXT("\r\n\tVerMin = 0x%08lx")
|
|
TEXT("\r\n\tUseCount = 0x%08lx\r\n"),
|
|
pDomainBuffer->next,
|
|
pDomainBuffer->prev,
|
|
pDomainBuffer->Index,
|
|
pDomainBuffer->Name,
|
|
pDomainBuffer->PDCName,
|
|
pDomainBuffer->Type,
|
|
pDomainBuffer->VerMaj,
|
|
pDomainBuffer->VerMin,
|
|
pDomainBuffer->UseCount
|
|
);
|
|
|
|
if (fDoEntireList && pDomainBuffer->next)
|
|
DumpDomainBuffer(pDomainBuffer->next);
|
|
|
|
dprintf(
|
|
TEXT("---DOMAIN_BUFFER(0x%08lx)\r\n"),
|
|
pDomainBuffer
|
|
);
|
|
}
|
|
else
|
|
dprintf(TEXT("Null pDomainBuffer\r\n"));
|
|
|
|
} // DumpDomainBuffer
|
|
|
|
|
|
void DumpVirtualShareBuffer(VIRTUAL_SHARE_BUFFER *pVirtualShareBuffer)
|
|
{
|
|
if (pVirtualShareBuffer)
|
|
{
|
|
dprintf(
|
|
TEXT("+++VIRTUAL_SHARE_BUFFER(0x%08lx)"),
|
|
pVirtualShareBuffer
|
|
);
|
|
|
|
dprintf(
|
|
TEXT("\r\n\tVFlag = 0x%08lx")
|
|
TEXT("\r\n\tnext = 0x%08lx")
|
|
TEXT("\r\n\tprev = 0x%08lx")
|
|
TEXT("\r\n\tIndex = 0x%08lx")
|
|
TEXT("\r\n\tName = %s")
|
|
TEXT("\r\n\tUseCount = 0x%08lx")
|
|
TEXT("\r\n\tPath = %s")
|
|
TEXT("\r\n\tDrive = 0x%08lx\r\n"),
|
|
pVirtualShareBuffer->VFlag,
|
|
pVirtualShareBuffer->next,
|
|
pVirtualShareBuffer->prev,
|
|
pVirtualShareBuffer->Index,
|
|
pVirtualShareBuffer->Name,
|
|
pVirtualShareBuffer->UseCount,
|
|
pVirtualShareBuffer->Path,
|
|
pVirtualShareBuffer->Drive
|
|
);
|
|
|
|
if (pVirtualShareBuffer->Drive)
|
|
DumpDriveBuffer(pVirtualShareBuffer->Drive);
|
|
|
|
if (fDoEntireList && pVirtualShareBuffer->next)
|
|
DumpVirtualShareBuffer(pVirtualShareBuffer->next);
|
|
|
|
dprintf(
|
|
TEXT("---VIRTUAL_SHARE_BUFFER(0x%08lx)\r\n"),
|
|
pVirtualShareBuffer
|
|
);
|
|
}
|
|
else
|
|
dprintf(TEXT("Null pVirtualShareBuffer\r\n"));
|
|
|
|
} // DumpVirtualShareBuffer
|
|
|
|
|
|
void DumpShareList(SHARE_LIST *pShareList)
|
|
{
|
|
ULONG index;
|
|
if (pShareList)
|
|
{
|
|
dprintf(
|
|
TEXT(">>>SHARE_LIST(0x%08lx)(%d entries, %d converting, %s)\r\n"),
|
|
pShareList,
|
|
pShareList->Count,
|
|
pShareList->ConvertCount,
|
|
pShareList->Fixup ? TEXT("FIXUP") : TEXT("NO FIXUP")
|
|
);
|
|
for (index = 0; index < pShareList->Count; index++ )
|
|
DumpShareBuffer(&pShareList->SList[index]);
|
|
}
|
|
else
|
|
dprintf(TEXT("Null pShareList\r\n"));
|
|
|
|
} // DumpShareList
|
|
|
|
|
|
void DumpShareBuffer(SHARE_BUFFER *pShareBuffer)
|
|
{
|
|
if (pShareBuffer)
|
|
{
|
|
dprintf(
|
|
TEXT("+++SHARE_BUFFER(0x%08lx)"),
|
|
pShareBuffer
|
|
);
|
|
|
|
dprintf(
|
|
TEXT("\r\n\tVFlag = 0x%08lx")
|
|
TEXT("\r\n\tIndex = 0x%08lx")
|
|
TEXT("\r\n\tName = %s")
|
|
TEXT("\r\n\tConvert = 0x%08lx")
|
|
TEXT("\r\n\tHiddenFiles = 0x%08lx")
|
|
TEXT("\r\n\tSystemFiles = 0x%08lx")
|
|
TEXT("\r\n\tToFat = 0x%08lx")
|
|
TEXT("\r\n\tRoot = 0x%08lx")
|
|
TEXT("\r\n\tDrive = 0x%08lx")
|
|
TEXT("\r\n\tSize = 0x%08lx")
|
|
TEXT("\r\n\tPath = %s")
|
|
TEXT("\r\n\tSubDir = %s")
|
|
TEXT("\r\n\tVirtual = 0x%08lx")
|
|
TEXT("\r\n\tDestShare = 0x%08lx\r\n"),
|
|
pShareBuffer->VFlag,
|
|
pShareBuffer->Index,
|
|
pShareBuffer->Name,
|
|
pShareBuffer->Convert,
|
|
pShareBuffer->HiddenFiles,
|
|
pShareBuffer->SystemFiles,
|
|
pShareBuffer->ToFat,
|
|
pShareBuffer->Root,
|
|
pShareBuffer->Drive,
|
|
pShareBuffer->Size,
|
|
pShareBuffer->Path,
|
|
pShareBuffer->SubDir,
|
|
pShareBuffer->Virtual,
|
|
pShareBuffer->DestShare
|
|
);
|
|
|
|
if (pShareBuffer->Root)
|
|
DumpDirBuffer(pShareBuffer->Root);
|
|
|
|
if (pShareBuffer->Drive)
|
|
DumpDriveBuffer(pShareBuffer->Drive);
|
|
|
|
if (pShareBuffer->DestShare)
|
|
if (!pShareBuffer->Virtual)
|
|
DumpShareBuffer(pShareBuffer->DestShare);
|
|
else
|
|
DumpVirtualShareBuffer((VIRTUAL_SHARE_BUFFER *)pShareBuffer->DestShare);
|
|
|
|
dprintf(
|
|
TEXT("---SHARE_BUFFER(0x%08lx)\r\n"),
|
|
pShareBuffer
|
|
);
|
|
}
|
|
else
|
|
dprintf(TEXT("Null pShareBuffer\r\n"));
|
|
|
|
} // DumpShareBuffer
|
|
|
|
|
|
void DumpDriveList(DRIVE_LIST *pDriveList)
|
|
{
|
|
ULONG index;
|
|
if (pDriveList)
|
|
{
|
|
dprintf(TEXT(">>>DRIVE_LIST(0x%08lx)(%d entries)\r\n"), pDriveList, pDriveList->Count);
|
|
for (index = 0; index < pDriveList->Count; index++ )
|
|
DumpDriveBuffer(&pDriveList->DList[index]);
|
|
}
|
|
else
|
|
dprintf(TEXT("Null pDriveList\r\n"));
|
|
|
|
} // DumpDriveList
|
|
|
|
|
|
void DumpDriveBuffer(DRIVE_BUFFER *pDriveBuffer)
|
|
{
|
|
if (pDriveBuffer)
|
|
{
|
|
dprintf(
|
|
TEXT("+++DRIVE_BUFFER(0x%08lx)"),
|
|
pDriveBuffer
|
|
);
|
|
|
|
dprintf(
|
|
TEXT("\r\n\tType = 0x%08lx")
|
|
TEXT("\r\n\tDrive = %s")
|
|
TEXT("\r\n\tDriveType = %s")
|
|
TEXT("\r\n\tName = %s")
|
|
TEXT("\r\n\tTotalSpace = 0x%08lx")
|
|
TEXT("\r\n\tFreeSpace = 0x%08lx")
|
|
TEXT("\r\n\tAllocSpace = 0x%08lx\r\n"),
|
|
pDriveBuffer->Type,
|
|
pDriveBuffer->Drive,
|
|
pDriveBuffer->DriveType,
|
|
pDriveBuffer->Name,
|
|
pDriveBuffer->TotalSpace,
|
|
pDriveBuffer->FreeSpace,
|
|
pDriveBuffer->AllocSpace
|
|
);
|
|
|
|
dprintf(
|
|
TEXT("---DRIVE_BUFFER(0x%08lx)\r\n"),
|
|
pDriveBuffer
|
|
);
|
|
}
|
|
else
|
|
dprintf(TEXT("Null pDriveBuffer)\r\n"));
|
|
|
|
} // DumpDriveBuffer
|
|
|
|
|
|
void DumpDirBuffer(DIR_BUFFER *pDirBuffer)
|
|
{
|
|
if (pDirBuffer)
|
|
{
|
|
dprintf(
|
|
TEXT("+++DIR_BUFFER(0x%08lx)"),
|
|
pDirBuffer
|
|
);
|
|
|
|
dprintf(
|
|
TEXT("\r\n\tName = %s")
|
|
TEXT("\r\n\tparent = 0x%08lx")
|
|
TEXT("\r\n\tLast = 0x%08lx")
|
|
TEXT("\r\n\tAttributes = 0x%08lx")
|
|
TEXT("\r\n\tConvert = 0x%08lx")
|
|
TEXT("\r\n\tSpecial = 0x%08lx")
|
|
TEXT("\r\n\tDirList = 0x%08lx")
|
|
TEXT("\r\n\tFileList = 0x%08lx\r\n"),
|
|
pDirBuffer->Name,
|
|
pDirBuffer->parent,
|
|
pDirBuffer->Last,
|
|
pDirBuffer->Attributes,
|
|
pDirBuffer->Convert,
|
|
pDirBuffer->Special,
|
|
pDirBuffer->DirList,
|
|
pDirBuffer->FileList
|
|
);
|
|
|
|
// if (pDirBuffer->DirList)
|
|
// DumpDirList(pDirBuffer->DirList);
|
|
|
|
// if (pDirBuffer->FileList)
|
|
// DumpFileList(pDirBuffer->FileList);
|
|
|
|
dprintf(
|
|
TEXT("---DIR_BUFFER(0x%08lx)\r\n"),
|
|
pDirBuffer
|
|
);
|
|
}
|
|
else
|
|
dprintf(TEXT("Null pDirBuffer\r\n"));
|
|
|
|
} // DumpDirBuffer
|
|
#endif
|