Windows API - EnableRouter

Ah deswegen also, danke :)
C++:
#include <windows.h>
#include <iphlpapi.h>
#include <iostream>

using namespace std;


int test()
{
    HANDLE       *myHandle = NULL;
    OVERLAPPED Overlapped;
    DWORD ret;
    SECURITY_ATTRIBUTES security_test;

    security_test.bInheritHandle            = true;
    security_test.lpSecurityDescriptor        = NULL;
    security_test.nLength                    = sizeof (SECURITY_ATTRIBUTES);

    Overlapped.Internal        = 0;
    Overlapped.InternalHigh = 0;
    Overlapped.Offset        = 0;
    Overlapped.OffsetHigh    = 0;
    Overlapped.Pointer        = 0;
    Overlapped.hEvent = CreateEvent(&security_test, false, true, NULL);

    ret = EnableRouter(NULL, &Overlapped);
    cout << "ret enable router = " << ret << endl;    //hier bekomme ich 997

    WaitForSingleObject(Overlapped.hEvent, 3000);    
    cout << GetLastError() << endl;       //hier bekomme ich 0

    cin.get(); cin.get();

    return 0;
}
ich habe folgenden Code, es wird zwar umgeschaltet, aber wenn ich das Programm beende bleibt die Einstellung wohl nicht erhalten :/
Vielleciht
 
Hallo EdwardBlack

Das steht ebenso wie alles bisher hier erklärte auch auf der Seite der MSDN:
If the process that calls EnableRouter terminates without calling UnenableRouter, the system decrements the reference count that tracks the number of requests to enable IPv4 forwarding as though the process had called UnenableRouter.

Auch wegen dem vermeintlich fehlerhaften Rückgabewert 997:
If the EnableRouter function succeeds, the return value is ERROR_IO_PENDING.

Link:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa365896(v=vs.85).aspx

Viele Grüsse
Cromon
 
Hi Cromon,
ok ! :) das heisst also mein Programm (bzw. Prozess) muss eben dauernd laufen wenn ich Ipv4 Forwarding aktiviert haben möchte und der vermeintliche Fehler war überhaupt kein Fehler. Mensch... ich werde in Zukunft die Dokus genauer lesen.

Danke dir!
 
Zurück