Почему происходит сбой этой программы? - PullRequest
2 голосов
/ 02 декабря 2011

Я пишу сетевую программу.он открывает порт в брандмауэре Windows и его номер порта.Я создал файл DLL, который содержит все коды для изменения брандмауэра.В этой программе я использую эту DLL.Когда я выполняю это в первый раз, программа падает перед выгрузкой библиотеки.Он не показывает «Unloading Firewall DLL» ... Но если я попытаюсь снова, то он работает нормально (программа разрешена, и порт открывается в брандмауэре с первой попытки.)

Вот код ивывод:

    int Load_DLL(void)
{
    TCHAR szPath[MAX_PATH] = {};
    GetModuleFileName(NULL,szPath,MAX_PATH);

    HINSTANCE Lib;
    WIN_FIREWALL addr;
    Log("Loading Firewall DLL ...");
    Lib = LoadLibrary(FIREWALL_DLL);
    if(Lib != NULL)
    {
        addr = (WIN_FIREWALL)GetProcAddress(Lib,"Win_Firewall");
        if(NULL != addr)
        {
            struct ManipFW mf = {};
            mf.OPCODE = ADDPORT;
            lstrcpy(mf.PortName,L"MSNet_Spool");
            mf.Port = PORT_I;
            (*addr)(mf,Log);
            memset(&mf,0,sizeof(mf));
            mf.OPCODE = ADDAPP;
            lstrcpy(mf.AppPath,szPath);
            lstrcpy(mf.AppName,L"MS_NET");
            (*addr)(mf,Log);
        }
        else 
            Log("Firewall GetProcAddress Failed \n");
        Log("Unloading Firewall DLL ...");
        FreeLibrary(Lib);

    }
    else
    {
        Log("Firewall DLL Load failed");
    }
    return 0;
}

Выход для первой попытки:

Loading Firewall DLL ...§4Port is not open in the firewall.

Port is now open in the firewall.

Authorized application  is disabled in the firewall.

Authorized application  is now enabled in the firewall.


This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Выход для следующей попытки:

Loading Firewall DLL ...í       Port is open in the firewall.

Authorized application is enabled in the firewall.

Unloading Firewall DLL ...

Это тот случай, если я выполнюпрограмма использует командную строку в режиме администратора.Но если я использую отладчик в VS2008 (работает с правами администратора), все работает отлично с первой попытки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...