Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Im folgenden Verfahren werden die Schritte beschrieben, die zum Aufzählen der Entitäten verwendet werden, die von der RTMv2-API verwendet werden. Der folgende Beispielcode zeigt, wie alle Routen aufgelistet werden.
Der grundlegende Prozess für jede Enumeration lautet wie folgt
- Starten Sie die Aufzählung, indem Sie ein Handle vom Routingtabellen-Manager abrufen. Rufen Sie RtmCreateDestEnum, RtmCreateRouteEnum und RtmCreateNextHopEnum auf, um die Kriterien zu liefern, die die Art der aufgezählten Informationen angeben. Diese Kriterien umfassen, aber nicht auf eine Reihe von Zielen, eine bestimmte Schnittstelle und die Ansichten, in denen sich die Informationen befinden.
- Rufen Sie RtmGetEnumDests, RtmGetEnumRoutes und RtmGetEnumNextHops eine oder mehrere Male auf, um Daten abzurufen, bis der Routingtabellen-Manager ERROR_NO_MORE_ITEMS zurückgibt. Die Routen-, Ziel- und Next-Hop-Daten werden in der Reihenfolge der Adressinformationen zurückgegeben (und die Einstellungs- und Metrikwerte, wenn Routen aufgezählt werden).
- Rufen Sie RtmReleaseDests, RtmReleaseRoutes und RtmReleaseNextHops auf, wenn die der Enumeration zugeordneten Handles oder Informationsstrukturen nicht mehr erforderlich sind.
- Rufen Sie RtmDeleteEnumHandle- auf, um das Beim Erstellen der Enumeration zurückgegebene Enumerationshandle freizugeben. Diese Funktion wird verwendet, um das Handle für alle Typen von Enumerationen freizugeben.
Anmerkung
Routen, die sich im Haltezustand befinden, werden nur aufgezählt, wenn ein Client Daten aus allen Ansichten mithilfe von RTM_VIEW_MASK_ANY anfordert.
Der folgende Beispielcode zeigt, wie sie alle Routen in der Routingtabelle aufzählen.
MaxHandles = RegnProfile.MaxHandlesInEnum;
RouteHandles = _alloca(MaxHandles * sizeof(HANDLE));
// Do a "route enumeration" over the whole table
// by passing a NULL DestHandle in this function.
DestHandle = NULL; // Give a valid handle to enumerate over a particular destination
Status = RtmCreateRouteEnum(RtmRegHandle,
DestHandle,
RTM_VIEW_MASK_UCAST|RTM_VIEW_MASK_MCAST,
RTM_ENUM_OWN_ROUTES, // Get only your own routes
NULL,
0,
NULL,
0,
&EnumHandle2);
if (Status == NO_ERROR)
{
do
{
NumHandles = MaxHandles;
Status = RtmGetEnumRoutes(RtmRegHandle
EnumHandle2,
&NumHandles,
RouteHandles);
for (k = 0; k < NumHandles; k++)
{
wprintf("Route %d: %p\n", l++, RouteHandles[k]);
// Get route information using the route's handle
Status = RtmGetRouteInfo(...RouteHandles[k]...);
if (Status == NO_ERROR)
{
// Do whatever you want with the route info
//...
// Release the route information once you are done
RtmReleaseRouteInfo(...);
}
}
RtmReleaseRoutes(RtmRegHandle, NumHandles, RouteHandles);
}
while (Status == NO_ERROR)
// Close the enumeration and release its resources
RtmDeleteEnumHandle(RtmRegHandle, EnumHandle2);
}