Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > SetTcpEntry ошибка 87


Автор: bass 30.11.2011, 04:54
Код


typedef struct
{
DWORD dwState;
DWORD dwLocalAddr;
DWORD dwLocalPort;
DWORD dwRemoteAddr;
DWORD dwRemotePort;
DWORD dwOwningPid;
}
MIB_TCPROW_OWNER_PID, *PMIB_TCPROW_OWNER_PID;

typedef struct _MIB_TCPROW {
  DWORD dwState;
  DWORD dwLocalAddr;
  DWORD dwLocalPort;
  DWORD dwRemoteAddr;
  DWORD dwRemotePort;
} MIB_TCPROW, *PMIB_TCPROW;

MIB_TCPROW VremTable;



                        VremTable.dwState      = pTcpTable->table[i].dwState;
                        VremTable.dwLocalAddr  = pTcpTable->table[i].dwLocalAddr;
                        VremTable.dwLocalPort  = pTcpTable->table[i].dwLocalPort;
                        VremTable.dwRemoteAddr = pTcpTable->table[i].dwRemoteAddr;
                        VremTable.dwRemotePort = pTcpTable->table[i].dwRemotePort;
                        SetTcpEntry(&VremTable);//Ошибка 87



Получаю таблицу с помощью функции GetExtendedTcpTable ... Нужен пид процесса ... Но вот если нужно прибить порт SetTcpEntry возвращает ошибку 87 ... Погуглил типа неправильные параметры что делаю не так???? Да соединение установлено....

Автор: xvr 30.11.2011, 14:36
Цитата

Currently, the only state to which a TCP connection can be set is MIB_TCP_STATE_DELETE_TCB.
dwState стоит в MIB_TCP_STATE_DELETE_TCB?

Цитата

On Windows Vista and later, the SetTcpEntry function can only be called by a user logged on as a member of the Administrators group. If SetTcpEntry is called by a user that is not a member of the Administrators group, the function call will fail and ERROR_ACCESS_DENIED is returned.
Вызывается от имени Администратора?

Цитата

The SetTcpEntry function can also fail because of user account control (UAC) on Windows Vista and later. If an application that contains this function is executed by a user logged on as a member of the Administrators group other than the built-in Administrator, this call will fail unless the application has been marked in the manifest file with a requestedExecutionLevel set to requireAdministrator. If the application lacks this manifest file, a user logged on as a member of the Administrators group other than the built-in Administrator must then be executing the application in an enhanced shell as the built-in Administrator (RunAs administrator) for this function to succeed. 
В manifest'е прописано?

Автор: bass 30.11.2011, 16:48
MIB_TCP_STATE_DELETE_TCB? нет не в этом стайте.... а именно в коннекте....
Нужно прибивать соединение как делает фаервол...

Автор: xvr 30.11.2011, 18:38
Цитата(bass @  30.11.2011,  16:48 Найти цитируемый пост)
MIB_TCP_STATE_DELETE_TCB? нет не в этом стайте.... а именно в коннекте....

В VremTable.dwState должен быть MIB_TCP_STATE_DELETE_TCB :
Код

                        VremTable.dwState      =  MIB_TCP_STATE_DELETE_TCB  ; // pTcpTable->table[i].dwState;
                        VremTable.dwLocalAddr  = pTcpTable->table[i].dwLocalAddr;
                        VremTable.dwLocalPort  = pTcpTable->table[i].dwLocalPort;
                        VremTable.dwRemoteAddr = pTcpTable->table[i].dwRemoteAddr;
                        VremTable.dwRemotePort = pTcpTable->table[i].dwRemotePort;
                        SetTcpEntry(&VremTable);//Ошибка 87


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)