[This is preliminary documentation and subject to change.]
DWORD
APIENTRY
MibGetNext(
IN DWORD dwInputSize,
IN PVOID pInputData,
IN OUT PDWORD pdwOutputSize,
OUT PVOID pOutputData
)
/*++
Routine Description
Locks
Arguments
Return Value
NO_ERROR
--*/
{
PPROTO_MIB_QUERY pQuery;
PPROTO_MIB_RESPONSE pResponse;
PPROTO_MIB_INTF pMibIf;
PPROTO_MIB_GLOBAL pMibGlobal;
ULONG ulNumIndices;
DWORD dwResult;
EnterProtocolApi();
TraceEnter("MibGet");
if(dwInputSize < sizeof(DWORD))
{
//
// Need at least the OID to do the get
//
TraceLeave("MibGet");
ExitProtocolApi();
return ERROR_INVALID_PARAMETER;
}
//
// The input to the function is the query
//
pQuery = (PPROTO_MIB_QUERY)pInputData;
pResponse = (PPROTO_MIB_RESPONSE)pOutputData;
//
// It would be really bad if someone messed the sizes up
//
ASSERT(dwInputSize%sizeof(DWORD) == 0);
ulNumIndices = NUM_INDICES(dwInputSize);
dwResult = NO_ERROR;
switch(pQuery->dwOid)
{
case PROTO_MIB_GLOBAL_ID:
{
//
// Only support GET_NEXT for tables
//
dwResult = ERROR_INVALID_PARAMETER;
break;
}
case PROTO_MIB_INTF_ID:
{
EnterCriticalSection(&g_csIfListLock);
dwResult = LocateInterface(QUERY_TYPE_GET_FIRST,
pQuery,
ulNumIndices,
pResponse,
pdwOutputSize);
LeaveCriticalSection(&g_csIfListLock);
break;
}
}
TraceLeave("MibGet");
ExitProtocolApi();
return dwResult;
}