/*++ Copyright (c) 1990 Microsoft Corporation Module Name: netbtkd.c Abstract: Netbt Kernel Debugger extension Author: Shirish Koti Revision History: 6-Jun-1991 Koti Created --*/ #include "types.h" #include /* * RDR2 global variables. * */ LPSTR GlobalBool[] = {0}; LPSTR GlobalShort[] = {0}; LPSTR GlobalLong[] = {0}; LPSTR GlobalPtrs[] = {0}; LPSTR Extensions[] = { "Netbt debugger extensions", 0 }; /* * DeviceContext debugging. * */ FIELD_DESCRIPTOR DeviceContext[] = { FIELD3(FieldTypeStruct,tDEVICECONTEXT,DeviceObject), FIELD3(FieldTypeListEntry,tDEVICECONTEXT,Linkage), FIELD3(FieldTypePointer,tDEVICECONTEXT,SpinLock), FIELD3(FieldTypePointer,tDEVICECONTEXT,Verify), FIELD3(FieldTypeListEntry,tDEVICECONTEXT,UpConnectionInUse), FIELD3(FieldTypeListEntry,tDEVICECONTEXT,LowerConnection), FIELD3(FieldTypeListEntry,tDEVICECONTEXT,LowerConnFreeHead), FIELD3(FieldTypeUnicodeString,tDEVICECONTEXT,BindName), FIELD3(FieldTypeUnicodeString,tDEVICECONTEXT,ExportName), FIELD3(FieldTypeIpAddr,tDEVICECONTEXT,IpAddress), FIELD3(FieldTypeIpAddr,tDEVICECONTEXT,SubnetMask), FIELD3(FieldTypeIpAddr,tDEVICECONTEXT,BroadcastAddress), FIELD3(FieldTypeIpAddr,tDEVICECONTEXT,NetMask), FIELD3(FieldTypePointer,tDEVICECONTEXT,hNameServer), FIELD3(FieldTypePointer,tDEVICECONTEXT,pNameServerDeviceObject), FIELD3(FieldTypePointer,tDEVICECONTEXT,pNameServerFileObject), FIELD3(FieldTypePointer,tDEVICECONTEXT,hDgram), FIELD3(FieldTypePointer,tDEVICECONTEXT,pDgramDeviceObject), FIELD3(FieldTypePointer,tDEVICECONTEXT,pDgramFileObject), FIELD3(FieldTypePointer,tDEVICECONTEXT,hSession), FIELD3(FieldTypePointer,tDEVICECONTEXT,pSessionDeviceObject), FIELD3(FieldTypePointer,tDEVICECONTEXT,pSessionFileObject), FIELD3(FieldTypePointer,tDEVICECONTEXT,hControl), FIELD3(FieldTypePointer,tDEVICECONTEXT,pControlDeviceObject), FIELD3(FieldTypePointer,tDEVICECONTEXT,pControlFileObject), FIELD3(FieldTypeIpAddr,tDEVICECONTEXT,lNameServerAddress), FIELD3(FieldTypeIpAddr,tDEVICECONTEXT,lBackupServer), FIELD3(FieldTypePointer,tDEVICECONTEXT,pPermClient), FIELD3(FieldTypeULongULong,tDEVICECONTEXT,AdapterNumber), FIELD3(FieldTypeMacAddr,tDEVICECONTEXT,MacAddress), FIELD3(FieldTypeChar,tDEVICECONTEXT,LockNumber), FIELD3(FieldTypeBoolean,tDEVICECONTEXT,RefreshToBackup), FIELD3(FieldTypeBoolean,tDEVICECONTEXT,PointToPoint), FIELD3(FieldTypeBoolean,tDEVICECONTEXT,WinsIsDown), 0 }; FIELD_DESCRIPTOR NameAddr[] = { FIELD3(FieldTypeListEntry,tNAMEADDR,Linkage), FIELD3(FieldTypePointer,tNAMEADDR,pAddressEle), FIELD3(FieldTypeIpAddr,tNAMEADDR,IpAddress), FIELD3(FieldTypePointer,tNAMEADDR,pIpAddrsList), FIELD3(FieldTypePointer,tNAMEADDR,pTracker), FIELD3(FieldTypePointer,tNAMEADDR,pTimer), FIELD3(FieldTypePointer,tNAMEADDR,Ttl), FIELD3(FieldTypeULong,tNAMEADDR,RefCount), FIELD3(FieldTypePointer,tNAMEADDR,NameTypeState), FIELD3(FieldTypePointer,tNAMEADDR,Verify), FIELD3(FieldTypeULongULong,tNAMEADDR,AdapterMask), FIELD3(FieldTypeULongULong,tNAMEADDR,RefreshMask), FIELD3(FieldTypeUShort,tNAMEADDR,TimeOutCount), FIELD3(FieldTypeBoolean,tNAMEADDR,fProxyReq), #ifdef PROXY_NODE FIELD3(FieldTypeBoolean,tNAMEADDR,fPnode), #endif FIELD3(FieldTypeNBName,tNAMEADDR,Name), 0 }; FIELD_DESCRIPTOR AddressEle[] = { FIELD3(FieldTypeListEntry,tADDRESSELE,Linkage), FIELD3(FieldTypePointer,tADDRESSELE,Verify), FIELD3(FieldTypePointer,tADDRESSELE,SpinLock), FIELD3(FieldTypeListEntry,tADDRESSELE,ClientHead), FIELD3(FieldTypePointer,tADDRESSELE,pNameAddr), FIELD3(FieldTypeULong,tADDRESSELE,RefCount), FIELD3(FieldTypePointer,tADDRESSELE,pDeviceContext), FIELD3(FieldTypePointer,tADDRESSELE,SecurityDescriptor), FIELD3(FieldTypeUShort,tADDRESSELE,NameType), FIELD3(FieldTypeChar,tADDRESSELE,LockNumber), FIELD3(FieldTypeBoolean,tADDRESSELE,MultiClients), 0 }; FIELD_DESCRIPTOR ClientEle[] = { FIELD3(FieldTypeListEntry,tCLIENTELE,Linkage), FIELD3(FieldTypePointer,tCLIENTELE,Verify), FIELD3(FieldTypePointer,tCLIENTELE,pIrp), FIELD3(FieldTypePointer,tCLIENTELE,SpinLock), FIELD3(FieldTypePointer,tCLIENTELE,pAddress), FIELD3(FieldTypeListEntry,tCLIENTELE,ConnectHead), FIELD3(FieldTypeListEntry,tCLIENTELE,ConnectActive), FIELD3(FieldTypeListEntry,tCLIENTELE,RcvDgramHead), FIELD3(FieldTypeListEntry,tCLIENTELE,ListenHead), FIELD3(FieldTypeListEntry,tCLIENTELE,SndDgrams), FIELD3(FieldTypePointer,tCLIENTELE,evConnect), FIELD3(FieldTypePointer,tCLIENTELE,ConEvContext), FIELD3(FieldTypePointer,tCLIENTELE,evReceive), FIELD3(FieldTypePointer,tCLIENTELE,RcvEvContext), FIELD3(FieldTypePointer,tCLIENTELE,evDisconnect), FIELD3(FieldTypePointer,tCLIENTELE,DiscEvContext), FIELD3(FieldTypePointer,tCLIENTELE,evError), FIELD3(FieldTypePointer,tCLIENTELE,ErrorEvContext), FIELD3(FieldTypePointer,tCLIENTELE,evRcvDgram), FIELD3(FieldTypePointer,tCLIENTELE,RcvDgramEvContext), FIELD3(FieldTypePointer,tCLIENTELE,evRcvExpedited), FIELD3(FieldTypePointer,tCLIENTELE,RcvExpedEvContext), FIELD3(FieldTypePointer,tCLIENTELE,evSendPossible), FIELD3(FieldTypePointer,tCLIENTELE,SendPossEvContext), FIELD3(FieldTypePointer,tCLIENTELE,pDeviceContext), FIELD3(FieldTypeULong,tCLIENTELE,RefCount), FIELD3(FieldTypeChar,tCLIENTELE,LockNumber), FIELD3(FieldTypeBoolean,tCLIENTELE,WaitingForRegistration), 0 }; FIELD_DESCRIPTOR ConnectEle[] = { FIELD3(FieldTypeListEntry,tCONNECTELE,Linkage), FIELD3(FieldTypePointer,tCONNECTELE,Verify), FIELD3(FieldTypePointer,tCONNECTELE,SpinLock), FIELD3(FieldTypePointer,tCONNECTELE,pLowerConnId), FIELD3(FieldTypePointer,tCONNECTELE,pClientEle), FIELD3(FieldTypePointer,tCONNECTELE,ConnectContext), FIELD3(FieldTypeNBName,tCONNECTELE,RemoteName), FIELD3(FieldTypePointer,tCONNECTELE,pNewMdl), FIELD3(FieldTypeULong,tCONNECTELE,CurrentRcvLen), FIELD3(FieldTypeULong,tCONNECTELE,FreeBytesInMdl), FIELD3(FieldTypeULong,tCONNECTELE,TotalPcktLen), FIELD3(FieldTypeULong,tCONNECTELE,BytesInXport), FIELD3(FieldTypeULong,tCONNECTELE,BytesRcvd), FIELD3(FieldTypeULong,tCONNECTELE,ReceiveIndicated), FIELD3(FieldTypePointer,tCONNECTELE,pNextMdl), FIELD3(FieldTypeULong,tCONNECTELE,OffsetFromStart), FIELD3(FieldTypePointer,tCONNECTELE,pIrp), FIELD3(FieldTypePointer,tCONNECTELE,pIrpClose), FIELD3(FieldTypePointer,tCONNECTELE,pIrpDisc), FIELD3(FieldTypePointer,tCONNECTELE,pIrpRcv), FIELD3(FieldTypeULong,tCONNECTELE,RefCount), FIELD3(FieldTypeULong,tCONNECTELE,state), FIELD3(FieldTypeBoolean,tCONNECTELE,Orig), FIELD3(FieldTypeChar,tCONNECTELE,LockNumber), FIELD3(FieldTypeChar,tCONNECTELE,SessionSetupCount), FIELD3(FieldTypeChar,tCONNECTELE,DiscFlag), FIELD3(FieldTypeBoolean,tCONNECTELE,JunkMsgFlag), 0 }; FIELD_DESCRIPTOR LowerConn[] = { FIELD3(FieldTypeListEntry,tLOWERCONNECTION,Linkage), FIELD3(FieldTypePointer,tLOWERCONNECTION,Verify), FIELD3(FieldTypePointer,tLOWERCONNECTION,SpinLock), FIELD3(FieldTypePointer,tLOWERCONNECTION,pUpperConnection), FIELD3(FieldTypePointer,tLOWERCONNECTION,FileHandle), FIELD3(FieldTypePointer,tLOWERCONNECTION,pFileObject), FIELD3(FieldTypePointer,tLOWERCONNECTION,AddrFileHandle), FIELD3(FieldTypePointer,tLOWERCONNECTION,pAddrFileObject), FIELD3(FieldTypePointer,tLOWERCONNECTION,pDeviceContext), FIELD3(FieldTypePointer,tLOWERCONNECTION,pIndicateMdl), FIELD3(FieldTypeULongULong,tLOWERCONNECTION,BytesRcvd), FIELD3(FieldTypeULongULong,tLOWERCONNECTION,BytesSent), FIELD3(FieldTypePointer,tLOWERCONNECTION,pMdl), FIELD3(FieldTypeUShort,tLOWERCONNECTION,BytesInIndicate), FIELD3(FieldTypeUShort,tLOWERCONNECTION,StateRcv), FIELD3(FieldTypeIpAddr,tLOWERCONNECTION,SrcIpAddr), FIELD3(FieldTypeULong,tLOWERCONNECTION,State), FIELD3(FieldTypeULong,tLOWERCONNECTION,RefCount), FIELD3(FieldTypePointer,tLOWERCONNECTION,pIrp), FIELD3(FieldTypePointer,tLOWERCONNECTION,CurrentStateProc), FIELD3(FieldTypeBoolean,tLOWERCONNECTION,bReceivingToIndicateBuffer), FIELD3(FieldTypeChar,tLOWERCONNECTION,LockNumber), FIELD3(FieldTypeBoolean,tLOWERCONNECTION,bOriginator), FIELD3(FieldTypeBoolean,tLOWERCONNECTION,InRcvHandler), FIELD3(FieldTypeBoolean,tLOWERCONNECTION,DestroyConnection), 0 }; FIELD_DESCRIPTOR Tracker[] = { FIELD3(FieldTypeListEntry,tDGRAM_SEND_TRACKING,Linkage), FIELD3(FieldTypeListEntry,tDGRAM_SEND_TRACKING,TrackerList), FIELD3(FieldTypePointer,tDGRAM_SEND_TRACKING,Verify), FIELD3(FieldTypePointer,tDGRAM_SEND_TRACKING,pClientIrp), FIELD3(FieldTypePointer,tDGRAM_SEND_TRACKING,pConnEle), FIELD3(FieldTypeStruct,tDGRAM_SEND_TRACKING,SendBuffer), FIELD3(FieldTypePointer,tDGRAM_SEND_TRACKING,pSendInfo), FIELD3(FieldTypePointer,tDGRAM_SEND_TRACKING,pDeviceContext), FIELD3(FieldTypePointer,tDGRAM_SEND_TRACKING,pTimer), FIELD3(FieldTypePointer,tDGRAM_SEND_TRACKING,RefCount), FIELD3(FieldTypePointer,tDGRAM_SEND_TRACKING,pNameAddr), FIELD3(FieldTypePointer,tDGRAM_SEND_TRACKING,pTimeout), FIELD3(FieldTypePointer,tDGRAM_SEND_TRACKING,AllocatedLength), FIELD3(FieldTypePointer,tDGRAM_SEND_TRACKING,CompletionRoutine), FIELD3(FieldTypeUShort,tDGRAM_SEND_TRACKING,Flags), FIELD3(FieldTypeListEntry,tDGRAM_SEND_TRACKING,DebugLinkage), 0 }; FIELD_DESCRIPTOR Nbt_Config[] = { FIELD3(FieldTypePointer,tNBTCONFIG,SpinLock), FIELD3(FieldTypeULong,tNBTCONFIG,NumConnections), FIELD3(FieldTypeULong,tNBTCONFIG,NumAddresses), FIELD3(FieldTypeListEntry,tNBTCONFIG,DeviceContexts), FIELD3(FieldTypeListEntry,tNBTCONFIG,DgramTrackerFreeQ), FIELD3(FieldTypeListEntry,tNBTCONFIG,NodeStatusHead), FIELD3(FieldTypeListEntry,tNBTCONFIG,AddressHead), FIELD3(FieldTypeListEntry,tNBTCONFIG,PendingNameQueries), FIELD3(FieldTypePointer,tNBTCONFIG,pControlObj), FIELD3(FieldTypePointer,tNBTCONFIG,DriverObject), FIELD3(FieldTypeListEntry,tNBTCONFIG,IrpFreeList), FIELD3(FieldTypePointer,tNBTCONFIG,SessionMdlFreeSingleList), FIELD3(FieldTypePointer,tNBTCONFIG,DgramMdlFreeSingleList), FIELD3(FieldTypePointer,tNBTCONFIG,pTcpBindName), FIELD3(FieldTypePointer,tNBTCONFIG,pLocalHashTbl), FIELD3(FieldTypePointer,tNBTCONFIG,pRemoteHashTbl), FIELD3(FieldTypeStruct,tNBTCONFIG,OutOfRsrc), FIELD3(FieldTypeUShort,tNBTCONFIG,uNumDevices), FIELD3(FieldTypeUShort,tNBTCONFIG,uNumLocalNames), FIELD3(FieldTypeUShort,tNBTCONFIG,uNumRemoteNames), FIELD3(FieldTypeUShort,tNBTCONFIG,uNumBucketsRemote), FIELD3(FieldTypeUShort,tNBTCONFIG,uNumBucketsLocal), FIELD3(FieldTypeUShort,tNBTCONFIG,TimerQSize), FIELD3(FieldTypeULong,tNBTCONFIG,uBcastTimeout), FIELD3(FieldTypeULong,tNBTCONFIG,uRetryTimeout), FIELD3(FieldTypeUShort,tNBTCONFIG,uNumRetries), FIELD3(FieldTypeUShort,tNBTCONFIG,uNumBcasts), FIELD3(FieldTypeUShort,tNBTCONFIG,ScopeLength), FIELD3(FieldTypeUShort,tNBTCONFIG,SizeTransportAddress), FIELD3(FieldTypePointer,tNBTCONFIG,pScope), FIELD3(FieldTypePointer,tNBTCONFIG,pBcastNetbiosName), FIELD3(FieldTypeULong,tNBTCONFIG,MinimumTtl), FIELD3(FieldTypeULong,tNBTCONFIG,RefreshDivisor), FIELD3(FieldTypeULong,tNBTCONFIG,RemoteHashTimeout), FIELD3(FieldTypeULong,tNBTCONFIG,WinsDownTimeout), FIELD3(FieldTypePointer,tNBTCONFIG,pRefreshTimer), FIELD3(FieldTypePointer,tNBTCONFIG,pSessionKeepAliveTimer), FIELD3(FieldTypePointer,tNBTCONFIG,pRemoteHashTimer), FIELD3(FieldTypeULong,tNBTCONFIG,InitialRefreshTimeout), FIELD3(FieldTypeULong,tNBTCONFIG,KeepAliveTimeout), FIELD3(FieldTypeULong,tNBTCONFIG,RegistryBcastAddr), FIELD3(FieldTypeUShort,tNBTCONFIG,DhcpNumConnections), FIELD3(FieldTypeUShort,tNBTCONFIG,CurrentHashBucket), FIELD3(FieldTypeUShort,tNBTCONFIG,PduNodeType), FIELD3(FieldTypeUShort,tNBTCONFIG,TransactionId), FIELD3(FieldTypeUShort,tNBTCONFIG,NameServerPort), FIELD3(FieldTypeUShort,tNBTCONFIG,sTimeoutCount), FIELD3(FieldTypeStruct,tNBTCONFIG,JointLock), FIELD3(FieldTypeChar,tNBTCONFIG,LockNumber), FIELD3(FieldTypeUShort,tNBTCONFIG,RemoteTimeoutCount), FIELD3(FieldTypeBoolean,tNBTCONFIG,UseRegistryBcastAddr), FIELD3(FieldTypeULong,tNBTCONFIG,MaxDgramBuffering), FIELD3(FieldTypeULong,tNBTCONFIG,LmHostsTimeout), FIELD3(FieldTypePointer,tNBTCONFIG,pLmHosts), FIELD3(FieldTypeULong,tNBTCONFIG,PathLength), FIELD3(FieldTypeChar,tNBTCONFIG,AdapterCount), FIELD3(FieldTypeBoolean,tNBTCONFIG,MultiHomed), FIELD3(FieldTypeBoolean,tNBTCONFIG,SingleResponse), FIELD3(FieldTypeBoolean,tNBTCONFIG,SelectAdapter), FIELD3(FieldTypeBoolean,tNBTCONFIG,ResolveWithDns), FIELD3(FieldTypeBoolean,tNBTCONFIG,EnableLmHosts), FIELD3(FieldTypeBoolean,tNBTCONFIG,EnableProxyRegCheck), FIELD3(FieldTypeBoolean,tNBTCONFIG,DoingRefreshNow), FIELD3(FieldTypeChar,tNBTCONFIG,CurrProc), FIELD3(FieldTypeUShort,tNBTCONFIG,OpRefresh), 0 }; FIELD_DESCRIPTOR NbtWorkContext[] = { FIELD3(FieldTypeStruct,NBT_WORK_ITEM_CONTEXT,Item), FIELD3(FieldTypePointer,NBT_WORK_ITEM_CONTEXT,pTracker), FIELD3(FieldTypePointer,NBT_WORK_ITEM_CONTEXT,pClientContext), FIELD3(FieldTypePointer,NBT_WORK_ITEM_CONTEXT,ClientCompletion), FIELD3(FieldTypeBoolean,NBT_WORK_ITEM_CONTEXT,TimedOut), 0 }; FIELD_DESCRIPTOR Timer_Entry[] = { FIELD3(FieldTypeStruct,tTIMERQENTRY,VxdTimer), FIELD3(FieldTypeListEntry,tTIMERQENTRY,Linkage), FIELD3(FieldTypePointer,tTIMERQENTRY,Context), FIELD3(FieldTypePointer,tTIMERQENTRY,Context2), FIELD3(FieldTypePointer,tTIMERQENTRY,CompletionRoutine), FIELD3(FieldTypePointer,tTIMERQENTRY,ClientContext), FIELD3(FieldTypePointer,tTIMERQENTRY,ClientCompletion), FIELD3(FieldTypePointer,tTIMERQENTRY,pCacheEntry), FIELD3(FieldTypeULong,tTIMERQENTRY,DeltaTime), FIELD3(FieldTypeUShort,tTIMERQENTRY,Flags), FIELD3(FieldTypeUShort,tTIMERQENTRY,Retries), FIELD3(FieldTypeChar,tTIMERQENTRY,RefCount), 0 }; FIELD_DESCRIPTOR Dns_Queries[] = { FIELD3(FieldTypePointer,tDNS_QUERIES,QueryIrp), FIELD3(FieldTypeListEntry,tDNS_QUERIES,ToResolve), FIELD3(FieldTypePointer,tDNS_QUERIES,Context), FIELD3(FieldTypeBoolean,tDNS_QUERIES,ResolvingNow), 0 }; // // List of structs currently handled by the debugger extensions // STRUCT_DESCRIPTOR Structs[] = { STRUCT(tDEVICECONTEXT,DeviceContext), STRUCT(tNAMEADDR,NameAddr), STRUCT(tADDRESSELE,AddressEle), STRUCT(tCLIENTELE,ClientEle), STRUCT(tCONNECTELE,ConnectEle), STRUCT(tLOWERCONNECTION,LowerConn), STRUCT(tDGRAM_SEND_TRACKING,Tracker), STRUCT(tNBTCONFIG,Nbt_Config), STRUCT(NBT_WORK_ITEM_CONTEXT,NbtWorkContext), STRUCT(tTIMERQENTRY,Timer_Entry), STRUCT(tDNS_QUERIES,Dns_Queries), 0 };