Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

518 lines
14 KiB

/*++
Copyright (c) 1994 Microsoft Corporation
Copyright (c) 1993 Micro Computer Systems, Inc.
Module Name:
net\svcdlls\nwsap\server\sapdebug.c
Abstract:
This has some debug code in it.
Author:
Brian Walker (MCS) 06-15-1993
Revision History:
--*/
#include "precomp.h"
#pragma hdrstop
#if DBG
/** File we output debug information to **/
WCHAR SapDbgFile[] = L"c:\\tmp\\sap.dbg";
UCHAR buffer[2048];
/** **/
#define WRITEIT(p) WriteFile(fd,p,strlen(p),&numwrote,NULL)
/*++
*******************************************************************
S a p D e b u g H a n d l e r
Routine Description:
Arguments:
Nothing
Return Value:
Exit Code
*******************************************************************
--*/
VOID
SapDebugHandler(
VOID)
{
HANDLE fd;
PSAP_RECORD Entry;
PSAP_CARD Cardptr;
PSAP_SERVER Servp;
DWORD numwrote;
PSDMD_LIST_ENTRY ListHead;
INT i;
PSAP_NAMEFILTER Filterp;
PSAP_FILTERHDR Hdrp;
INT Cnt;
/** **/
IF_DEBUG(ENABLEDUMP) {
SS_PRINT(("SAPDebugHandler ENTERED\n"));
}
/** Create the file **/
fd = CreateFile(
SapDbgFile,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (fd == INVALID_HANDLE_VALUE) {
IF_DEBUG(ERRORS) {
SS_PRINT(("SAPDEBUG: Error creating file\n"));
}
return;
}
/** Lock the database **/
ACQUIRE_READERS_LOCK("SapDebug");
/** Write out info we want **/
sprintf(buffer, "Num entries in database = %d\n", SapNumArrayEntries);
WRITEIT(buffer);
sprintf(buffer, "Current time is = %d\n", SdmdCurrentTime);
WRITEIT(buffer);
sprintf(buffer, "READ LOCK COUNT = %d\n", SdmdLockCount);
WRITEIT(buffer);
sprintf(buffer, "Last Worker Start Time = %d: Cur Time = %d\n", SapLastWorkerStartTime, GetCurrentTime());
WRITEIT(buffer);
sprintf(buffer, "Hash Table ptr = 0x%lx, Num Hash entries = %d\n", SdmdNameHashTable, SapHashTableSize);
WRITEIT(buffer);
sprintf(buffer, "SapRecheckCount = %d\n", SapRecheckCount);
WRITEIT(buffer);
sprintf(buffer, "SapDontHopLans = %d\n", SapDontHopLans);
WRITEIT(buffer);
ACQUIRE_THREADCOUNT_LOCK();
sprintf(buffer, "Thread Count = %d, Worker = %d, Recv = %d\n",
SapThreadCount,
SapCurWorkerThreads,
SapCurReceiveThreads);
RELEASE_THREADCOUNT_LOCK();
WRITEIT(buffer);
sprintf(buffer, "Number of bufs in free queue = %d\n", SapNumFreeBufs);
WRITEIT(buffer);
sprintf(buffer, "Number of bufs in recv list = %d\n", SapCurBackup);
WRITEIT(buffer);
sprintf(buffer, "Current Allocation Count = %d\n", SapAllocCount);
WRITEIT(buffer);
/**
Do all the LPC information
**/
sprintf(buffer, "\n=============== LPC ==================\n\n");
WRITEIT(buffer);
sprintf(buffer, "Listen Port Handle = 0x%lx\n", SapXsLpcPortHandle);
WRITEIT(buffer);
ACQUIRE_LPC_THREADCOUNT_LOCK();
sprintf(buffer, "Total Workers Threads = %d\n", SapLpcNumWorkers);
RELEASE_LPC_THREADCOUNT_LOCK();
WRITEIT(buffer);
ACQUIRE_LPCCLIENT_LOCK();
sprintf(buffer, "Number Lpc Clients = %d\n", SapNumLpcClients);
RELEASE_LPCCLIENT_LOCK();
WRITEIT(buffer);
/**
Do the advertise list
**/
sprintf(buffer, "\n=========== ADVERTISE LIST ===============\n\n");
WRITEIT(buffer);
/** Get access to the send list **/
ACQUIRE_SENDTABLE_LOCK();
/** Go find the server type in the list **/
Servp = SapServHead;
i = 0;
while (Servp) {
sprintf(buffer, "%3d: Name = %s\n", i++, Servp->ServerName);
WRITEIT(buffer);
sprintf(buffer, " Object Type = 0x%x: HopCount = %d: Changed = %d\n",
Servp->ServerType, Servp->Hopcount, Servp->Changed);
WRITEIT(buffer);
sprintf(buffer, " RespondNearest = %d\n", Servp->RespondNearest);
WRITEIT(buffer);
sprintf(buffer, " ClientId = 0x%lx\n", Servp->ClientId);
WRITEIT(buffer);
sprintf(buffer, " Address = %02x:%02x:%02x:%02x - %02x:%02x:%02x:%02x:%02x:%02x - %02x:%02x\n\n",
(UCHAR)Servp->Address[0],
(UCHAR)Servp->Address[1],
(UCHAR)Servp->Address[2],
(UCHAR)Servp->Address[3],
(UCHAR)Servp->Address[4],
(UCHAR)Servp->Address[5],
(UCHAR)Servp->Address[6],
(UCHAR)Servp->Address[7],
(UCHAR)Servp->Address[8],
(UCHAR)Servp->Address[9],
(UCHAR)Servp->Address[10],
(UCHAR)Servp->Address[11]);
WRITEIT(buffer);
/** Goto the next entry **/
Servp = Servp->Next;
}
RELEASE_SENDTABLE_LOCK();
/**
Do the network
**/
sprintf(buffer, "\n=============== NETWORK ==================\n\n");
WRITEIT(buffer);
sprintf(buffer, "Internal Address = %02x:%02x:%02x:%02x - %02x:%02x:%02x:%02x:%02x:%02x\n",
(UCHAR)SapNetNum[0],
(UCHAR)SapNetNum[1],
(UCHAR)SapNetNum[2],
(UCHAR)SapNetNum[3],
(UCHAR)SapNodeNum[0],
(UCHAR)SapNodeNum[1],
(UCHAR)SapNodeNum[2],
(UCHAR)SapNodeNum[3],
(UCHAR)SapNodeNum[4],
(UCHAR)SapNodeNum[5]);
WRITEIT(buffer);
sprintf(buffer, "\nNumber of cards = %d\n", SapNumCards);
WRITEIT(buffer);
sprintf(buffer, "\nMax Number of cards = %d\n", SapMaxCardIndex);
WRITEIT(buffer);
ACQUIRE_CARDLIST_READERS_LOCK("SapDebug X");
Cardptr = SapCardHead;
while (Cardptr) {
sprintf(buffer, "Cardnum %d: Address = %02x:%02x:%02x:%02x - %02x:%02x:%02x:%02x:%02x:%02x\n",
Cardptr->Number,
(UCHAR)Cardptr->Netnum[0],
(UCHAR)Cardptr->Netnum[1],
(UCHAR)Cardptr->Netnum[2],
(UCHAR)Cardptr->Netnum[3],
(UCHAR)Cardptr->Nodenum[0],
(UCHAR)Cardptr->Nodenum[1],
(UCHAR)Cardptr->Nodenum[2],
(UCHAR)Cardptr->Nodenum[3],
(UCHAR)Cardptr->Nodenum[4],
(UCHAR)Cardptr->Nodenum[5]);
WRITEIT(buffer);
sprintf(buffer, " LinkSpeed = %d, Wanflag = %d, ReqCount = %d\n",
Cardptr->Linkspeed, Cardptr->Wanflag, Cardptr->ReqCount);
WRITEIT(buffer);
Cardptr = Cardptr->Next;
}
RELEASE_CARDLIST_READERS_LOCK("SapDebug X");
/**
Dump out registry information
**/
sprintf(buffer, "\n========== REG PARMS ============\n\n");
WRITEIT(buffer);
sprintf(buffer, "SapMaxFreeBufs = %d\n", SapMaxFreeBufs);
WRITEIT(buffer);
sprintf(buffer, "SapNumRecvThreads = %d\n", SapNumRecvThreads);
WRITEIT(buffer);
sprintf(buffer, "SapNumWorkerThreads = %d\n", SapNumWorkerThreads);
WRITEIT(buffer);
sprintf(buffer, "SapSendMinutes = %d\n", SapSendMinutes);
WRITEIT(buffer);
sprintf(buffer, "SapNumArrayEntries = %d\n", SapNumArrayEntries);
WRITEIT(buffer);
sprintf(buffer, "SapTimeoutInterval = %d\n", SapTimeoutInterval);
WRITEIT(buffer);
sprintf(buffer, "SapMaxEverWorkerThreads = %d\n", SapMaxEverWorkerThreads);
WRITEIT(buffer);
sprintf(buffer, "SapNewWorkerThreshhold = %d\n", SapNewWorkerThreshhold);
WRITEIT(buffer);
sprintf(buffer, "SapNewWorkerTimeout = %d\n", SapNewWorkerTimeout);
WRITEIT(buffer);
sprintf(buffer, "SapNumWanNotifyThreads = %d\n", SapNumWanNotifyThreads);
WRITEIT(buffer);
sprintf(buffer, "SapRecheckAllCardsTime = %d\n", SapRecheckAllCardsTime);
WRITEIT(buffer);
/** Database dumping **/
sprintf(buffer, "\n=============== DATABASE ==================\n\n");
WRITEIT(buffer);
sprintf(buffer, "TYPE LIST Head = %d, Tail = %d\n",
SdmdLists[SAP_TYPELIST_INDEX].Flink,
SdmdLists[SAP_TYPELIST_INDEX].Blink);
WRITEIT(buffer);
sprintf(buffer, "TIME LIST Head = %d, Tail = %d\n",
SdmdLists[SAP_TIMELIST_INDEX].Flink,
SdmdLists[SAP_TIMELIST_INDEX].Blink);
WRITEIT(buffer);
/** **/
Entry = SdmdTablePtr;
for (i = 0 ; i < SapNumArrayEntries ; i++,Entry++) {
sprintf(buffer, "\nINDEX = %d **********************\n", Entry->Index);
WRITEIT(buffer);
SapDumpMemToMemory(Entry->ServName, SAP_OBJNAME_LEN, buffer);
WRITEIT(buffer);
sprintf(buffer, " Server Type = 0x%x: HopCount = %d\n", Entry->ServType, Entry->HopCount);
WRITEIT(buffer);
sprintf(buffer, " Card Number = %d: Timeout = %d\n", Entry->CardNumber, Entry->Timeout);
WRITEIT(buffer);
sprintf(buffer, " Address = %02x:%02x:%02x:%02x - %02x:%02x:%02x:%02x:%02x:%02x - %02x:%02x\n",
(UCHAR)(Entry->ServAddress[0]),
(UCHAR)(Entry->ServAddress[1]),
(UCHAR)(Entry->ServAddress[2]),
(UCHAR)(Entry->ServAddress[3]),
(UCHAR)(Entry->ServAddress[4]),
(UCHAR)(Entry->ServAddress[5]),
(UCHAR)(Entry->ServAddress[6]),
(UCHAR)(Entry->ServAddress[7]),
(UCHAR)(Entry->ServAddress[8]),
(UCHAR)(Entry->ServAddress[9]),
(UCHAR)(Entry->ServAddress[10]),
(UCHAR)(Entry->ServAddress[11]));
WRITEIT(buffer);
sprintf(buffer, " Advertiser = %02x:%02x:%02x:%02x:%02x:%02x\n",
(UCHAR)(Entry->Advertiser[0]),
(UCHAR)(Entry->Advertiser[1]),
(UCHAR)(Entry->Advertiser[2]),
(UCHAR)(Entry->Advertiser[3]),
(UCHAR)(Entry->Advertiser[4]),
(UCHAR)(Entry->Advertiser[5]));
WRITEIT(buffer);
sprintf(buffer, " Head Index = %d, Hash Index = %d\n", Entry->HeadIndex, Entry->HashIndex);
WRITEIT(buffer);
sprintf(buffer, " TYPE FLink = %d, Blink = %d\n",
Entry->Links[SAP_TYPELIST_INDEX].Flink,
Entry->Links[SAP_TYPELIST_INDEX].Blink);
WRITEIT(buffer);
sprintf(buffer, " TIME FLink = %d, Blink = %d\n",
Entry->Links[SAP_TIMELIST_INDEX].Flink,
Entry->Links[SAP_TIMELIST_INDEX].Blink);
WRITEIT(buffer);
sprintf(buffer, " SUB FLink = %d, Blink = %d\n",
Entry->Links[SAP_SUBLIST_INDEX].Flink,
Entry->Links[SAP_SUBLIST_INDEX].Blink);
WRITEIT(buffer);
sprintf(buffer, " HASH FLink = %d, Blink = %d\n",
Entry->Links[SAP_HASHLIST_INDEX].Flink,
Entry->Links[SAP_HASHLIST_INDEX].Blink);
WRITEIT(buffer);
sprintf(buffer, " Internal = %d: Changed = %d\n", Entry->Internal, Entry->Changed);
WRITEIT(buffer);
}
/** Dump out the hash entries **/
sprintf(buffer, "\n============== HASH TABLE =================\n\n");
WRITEIT(buffer);
ListHead = SdmdNameHashTable;
for (i = 0 ; i < SapHashTableSize ; i++,ListHead++) {
sprintf(buffer, "HashIndex = %d: Flink = %d: Blink = %d\n",
ListHead->ListIndex, ListHead->Flink, ListHead->Blink);
WRITEIT(buffer);
}
RELEASE_READERS_LOCK("SapDebug X");
/** Dump out the filter table **/
sprintf(buffer, "\n=============== FILTER TABLE ==================\n\n");
WRITEIT(buffer);
sprintf(buffer, "WAN Filter = %d\n", SapWanFilter);
WRITEIT(buffer);
sprintf(buffer, "Active Filter = %d\n", SapActiveFilter);
WRITEIT(buffer);
sprintf(buffer, "\n------------------- PASS TABLE------------------\n\n");
WRITEIT(buffer);
for (Cnt = 0 ; Cnt < SAP_NAMEFILTER_HASHSIZE ; Cnt++) {
/** **/
sprintf(buffer, "HashIndex = %d\n", Cnt);
WRITEIT(buffer);
/** Get ptr to this header **/
Hdrp = &SapNameFilterHashTable[Cnt];
Filterp = Hdrp->FirstEntry;
/** Free all of these entries **/
while (Filterp) {
sprintf(buffer, " %s\n", Filterp->ServerName);
WRITEIT(buffer);
Filterp = Filterp->Next;
}
}
/** All Done **/
CloseHandle(fd);
return;
}
/*++
*******************************************************************
S a p D e b u g M a l l o c
Routine Description:
This is the debug version of malloc
Arguments:
length = Number of bytes to malloc
string = Description string
Return Value:
None.
*******************************************************************
--*/
PVOID
SapDebugMalloc(
ULONG length,
PUCHAR string)
{
PVOID ptr;
/** Allocate the memory **/
ptr = malloc(length);
/** Do tracing **/
IF_DEBUG(MEMALLOC) {
SS_PRINT(("SAPALLOC: Ptr = 0x%lx: Length = %d: %s\n", ptr, length, string));
}
/** Count the allocation **/
if (ptr) {
EnterCriticalSection(&SapMemoryCriticalSection);
SapAllocCount++;
LeaveCriticalSection(&SapMemoryCriticalSection);
}
/** Return the pointer **/
return ptr;
}
/*++
*******************************************************************
S a p D e b u g F r e e
Routine Description:
This routine is the debug version of Free
Arguments:
ptr = Ptr to free
string = Ptr to description string
Return Value:
None.
*******************************************************************
--*/
VOID
SapDebugFree(
PVOID ptr,
PUCHAR string)
{
/** **/
IF_DEBUG(MEMALLOC) {
SS_PRINT(("SAPFREE: Ptr = 0x%lx: %s\n", ptr, string));
}
/** Count the allocation **/
EnterCriticalSection(&SapMemoryCriticalSection);
if (SapAllocCount == 0) {
IF_DEBUG(ERRORS) {
SS_PRINT(("SAPFREE: Alloc count going to 0\n"));
}
}
SapAllocCount--;
LeaveCriticalSection(&SapMemoryCriticalSection);
/** Free the pointer **/
free(ptr);
/** All Done **/
return;
}
#endif // if DBG