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.
374 lines
8.1 KiB
374 lines
8.1 KiB
/*++
|
|
|
|
Copyright (c) 1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
stats.c
|
|
|
|
Abstract:
|
|
|
|
Implements the stats command.
|
|
|
|
Author:
|
|
|
|
Keith Moore (keithmo) 06-May-1996
|
|
|
|
Environment:
|
|
|
|
User Mode.
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#include "afdkdp.h"
|
|
#pragma hdrstop
|
|
|
|
|
|
//
|
|
// Public functions.
|
|
//
|
|
|
|
DECLARE_API( stats )
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Dumps the debug-only AFD statistic counters.
|
|
|
|
Arguments:
|
|
|
|
None.
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
AFD_QUOTA_STATS quotaStats;
|
|
AFD_HANDLE_STATS handleStats;
|
|
AFD_QUEUE_STATS queueStats;
|
|
AFD_CONNECTION_STATS connectionStats;
|
|
ULONG64 address;
|
|
ULONG result;
|
|
|
|
gClient = pClient;
|
|
|
|
if (!CheckKmGlobals ()) {
|
|
return E_INVALIDARG;
|
|
}
|
|
|
|
//
|
|
// Dump the quota statistics.
|
|
//
|
|
|
|
address = GetExpression( "afd!AfdQuotaStats" );
|
|
|
|
if( address == 0 ) {
|
|
|
|
dprintf( "\nstats: Could not find afd!AfdQuotaStats\n" );
|
|
|
|
} else {
|
|
|
|
if( ReadMemory(
|
|
address,
|
|
"aStats,
|
|
sizeof(quotaStats),
|
|
&result
|
|
) ) {
|
|
|
|
dprintf(
|
|
"AfdQuotaStats:\n"
|
|
);
|
|
|
|
dprintf(
|
|
" Charged = %I64x\n",
|
|
quotaStats.Charged.QuadPart
|
|
);
|
|
|
|
dprintf(
|
|
" Returned = %I64x\n",
|
|
quotaStats.Returned.QuadPart
|
|
);
|
|
|
|
dprintf( "\n" );
|
|
|
|
} else {
|
|
|
|
dprintf(
|
|
"\nstats: Could not read afd!AfdQuotaStats @ %p\n",
|
|
address
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//
|
|
// Dump the handle statistics.
|
|
//
|
|
|
|
address = GetExpression( "afd!AfdHandleStats" );
|
|
|
|
if( address == 0 ) {
|
|
|
|
dprintf( "stats: Could not find afd!AfdHandleStats\n" );
|
|
|
|
} else {
|
|
|
|
if( ReadMemory(
|
|
address,
|
|
&handleStats,
|
|
sizeof(handleStats),
|
|
&result
|
|
) ) {
|
|
|
|
dprintf(
|
|
"AfdHandleStats:\n"
|
|
);
|
|
|
|
dprintf(
|
|
" AddrOpened = %lu\n",
|
|
handleStats.AddrOpened
|
|
);
|
|
|
|
dprintf(
|
|
" AddrClosed = %lu\n",
|
|
handleStats.AddrClosed
|
|
);
|
|
|
|
dprintf(
|
|
" AddrRef = %lu\n",
|
|
handleStats.AddrRef
|
|
);
|
|
|
|
dprintf(
|
|
" AddrDeref = %lu\n",
|
|
handleStats.AddrDeref
|
|
);
|
|
|
|
dprintf(
|
|
" ConnOpened = %lu\n",
|
|
handleStats.ConnOpened
|
|
);
|
|
|
|
dprintf(
|
|
" ConnClosed = %lu\n",
|
|
handleStats.ConnClosed
|
|
);
|
|
|
|
dprintf(
|
|
" ConnRef = %lu\n",
|
|
handleStats.ConnRef
|
|
);
|
|
|
|
dprintf(
|
|
" ConnDeref = %lu\n",
|
|
handleStats.ConnDeref
|
|
);
|
|
|
|
dprintf(
|
|
" FileRef = %lu\n",
|
|
handleStats.FileRef
|
|
);
|
|
|
|
dprintf(
|
|
" FileDeref = %lu\n",
|
|
handleStats.FileDeref
|
|
);
|
|
|
|
dprintf( "\n" );
|
|
|
|
} else {
|
|
|
|
dprintf(
|
|
"\nstats: Could not read afd!AfdHandleStats @ %p\n",
|
|
address
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//
|
|
// Dump the queue statistics.
|
|
//
|
|
|
|
address = GetExpression( "afd!AfdQueueStats" );
|
|
|
|
if( address == 0 ) {
|
|
|
|
dprintf( "stats: Could not find afd!AfdQueueStats\n" );
|
|
|
|
} else {
|
|
|
|
if( ReadMemory(
|
|
address,
|
|
&queueStats,
|
|
sizeof(queueStats),
|
|
&result
|
|
) ) {
|
|
|
|
dprintf(
|
|
"AfdQueueStats:\n"
|
|
);
|
|
|
|
dprintf(
|
|
" AfdWorkItemsQueued = %lu\n",
|
|
queueStats.AfdWorkItemsQueued
|
|
);
|
|
|
|
dprintf(
|
|
" ExWorkItemsQueued = %lu\n",
|
|
queueStats.ExWorkItemsQueued
|
|
);
|
|
|
|
dprintf(
|
|
" WorkerEnter = %lu\n",
|
|
queueStats.WorkerEnter
|
|
);
|
|
|
|
dprintf(
|
|
" WorkerLeave = %lu\n",
|
|
queueStats.WorkerLeave
|
|
);
|
|
|
|
dprintf(
|
|
" AfdWorkItemsProcessed = %lu\n",
|
|
queueStats.AfdWorkItemsProcessed
|
|
);
|
|
|
|
dprintf(
|
|
" AfdWorkerThread = %p\n",
|
|
(ULONG64)queueStats.AfdWorkerThread
|
|
);
|
|
|
|
dprintf( "\n" );
|
|
|
|
} else {
|
|
|
|
dprintf(
|
|
"\nstats: Could not read afd!AfdQueueStats @ %p\n",
|
|
address
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//
|
|
// Dump the queue statistics.
|
|
//
|
|
|
|
address = GetExpression( "afd!AfdConnectionStats" );
|
|
|
|
if( address == 0 ) {
|
|
|
|
dprintf( "\nstats: Could not find afd!AfdConnectionStats\n" );
|
|
|
|
} else {
|
|
|
|
if( ReadMemory(
|
|
address,
|
|
&connectionStats,
|
|
sizeof(connectionStats),
|
|
&result
|
|
) ) {
|
|
|
|
dprintf(
|
|
"AfdConnectionStats:\n"
|
|
);
|
|
|
|
dprintf(
|
|
" ConnectedReferencesAdded = %lu\n",
|
|
connectionStats.ConnectedReferencesAdded
|
|
);
|
|
|
|
dprintf(
|
|
" ConnectedReferencesDeleted = %lu\n",
|
|
connectionStats.ConnectedReferencesDeleted
|
|
);
|
|
|
|
dprintf(
|
|
" GracefulDisconnectsInitiated = %lu\n",
|
|
connectionStats.GracefulDisconnectsInitiated
|
|
);
|
|
|
|
dprintf(
|
|
" GracefulDisconnectsCompleted = %lu\n",
|
|
connectionStats.GracefulDisconnectsCompleted
|
|
);
|
|
|
|
dprintf(
|
|
" GracefulDisconnectIndications = %lu\n",
|
|
connectionStats.GracefulDisconnectIndications
|
|
);
|
|
|
|
dprintf(
|
|
" AbortiveDisconnectsInitiated = %lu\n",
|
|
connectionStats.AbortiveDisconnectsInitiated
|
|
);
|
|
|
|
dprintf(
|
|
" AbortiveDisconnectsCompleted = %lu\n",
|
|
connectionStats.AbortiveDisconnectsCompleted
|
|
);
|
|
|
|
dprintf(
|
|
" AbortiveDisconnectIndications = %lu\n",
|
|
connectionStats.AbortiveDisconnectIndications
|
|
);
|
|
|
|
dprintf(
|
|
" ConnectionIndications = %lu\n",
|
|
connectionStats.ConnectionIndications
|
|
);
|
|
|
|
dprintf(
|
|
" ConnectionsDropped = %lu\n",
|
|
connectionStats.ConnectionsDropped
|
|
);
|
|
|
|
dprintf(
|
|
" ConnectionsAccepted = %lu\n",
|
|
connectionStats.ConnectionsAccepted
|
|
);
|
|
|
|
dprintf(
|
|
" ConnectionsPreaccepted = %lu\n",
|
|
connectionStats.ConnectionsPreaccepted
|
|
);
|
|
|
|
dprintf(
|
|
" ConnectionsReused = %lu\n",
|
|
connectionStats.ConnectionsReused
|
|
);
|
|
|
|
|
|
dprintf(
|
|
" EndpointsReused = %lu\n",
|
|
connectionStats.EndpointsReused
|
|
);
|
|
|
|
|
|
dprintf( "\n" );
|
|
|
|
} else {
|
|
|
|
dprintf(
|
|
"\nstats: Could not read afd!AfdConnectionStats @ %p\n",
|
|
address
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return S_OK;
|
|
} // stats
|
|
|