GetExtendedTcpTable Runtime-Check-Failure #0



  • Hi,

    wenn ich das Programm compilieren will, erscheint ein Runtime-Check-Failure #0. Was mich wundert: Lasse ich es weiterlaufen, also nicht break sonders continue, kann ich in der pTcpTable einen meiner SVHosts sehen mit zugehöriger richtiger PID. Es scheint also zu funktionieren.

    Ich hab schon das halbe Netz durchgeguckt und auch Delphi und VB sourcen angeguckt, aber ich finde den Fehler nicht.

    Bei jedem GetExtendedTcpTable Aufruf kommt übrigens der Abbruch (Zeile 52 und 59).

    Vielleicht weiß ja einer von euch Rat.

    Danke

    #include <windows.h>
    #include <Iphlpapi.h>
    #include <stdio.h>
    #include <conio.h>
    
    typedef enum
    {
    	TCP_TABLE_BASIC_LISTENER,
    	TCP_TABLE_BASIC_CONNECTIONS,
    	TCP_TABLE_BASIC_ALL,
    	TCP_TABLE_OWNER_PID_LISTENER,
    	TCP_TABLE_OWNER_PID_CONNECTIONS,
    	TCP_TABLE_OWNER_PID_ALL,
    	TCP_TABLE_OWNER_MODULE_LISTENER,
    	TCP_TABLE_OWNER_MODULE_CONNECTIONS,
    	TCP_TABLE_OWNER_MODULE_ALL
    }TCP_TABLE_CLASS,*PTCP_TABLE_CLASS;
    
    typedef DWORD (*DLLPROC) (PVOID,PDWORD,BOOL,ULONG,TCP_TABLE_CLASS,ULONG);
    
    int main()
    {
    	HINSTANCE hinstDLL;
    	DLLPROC GetExtendedTcpTable;
    	BOOL fFreeDLL;
    
    	DWORD dwRetVal=0;
    
    	PMIB_TCPTABLE_OWNER_PID pTcpTable;
    
    	hinstDLL = LoadLibraryA("Iphlpapi.dll");
    	GetExtendedTcpTable = (DLLPROC) GetProcAddress(hinstDLL, "GetExtendedTcpTable");
    
    	pTcpTable=(MIB_TCPTABLE_OWNER_PID*) HeapAlloc(GetProcessHeap(),0,sizeof(MIB_TCPTABLE_OWNER_PID));
    	if(pTcpTable==NULL){
    		printf("NO_MEM\n");
    	}
    
    	DWORD dwSize=0;
    
    	if((dwRetVal=GetExtendedTcpTable(pTcpTable,&dwSize,false,AF_INET,TCP_TABLE_OWNER_PID_ALL,0))==ERROR_INSUFFICIENT_BUFFER){
    			printf("BUFFER_LOW\n");
    			HeapFree(GetProcessHeap(),0,pTcpTable);
    			pTcpTable=(MIB_TCPTABLE_OWNER_PID*)HeapAlloc(GetProcessHeap(),0,(UINT)dwSize);
    	}
    
    	GetExtendedTcpTable(pTcpTable,&dwSize,TRUE,AF_INET,TCP_TABLE_OWNER_PID_ALL,0);
    	fFreeDLL = FreeLibrary(hinstDLL);
    
    	while(_getch()!='q')
    	{
    	}
    	return 0;
    }
    


  • typedef DWORD (__stdcall *DLLPROC) (PVOID,PDWORD,BOOL,ULONG,TCP_TABLE_CLASS,ULONG);
    

    ➡ __stdcall fehlte bei dir



  • danke.


Log in to reply