Всем привет ! Пробую написать прогу по примеру, выводящую список портов ТСР и UDP , но выбивает 2 ошибки : 1 - Ошибка 1 error C2664: LookupPrivilegeValueW: невозможно преобразовать параметр 2 из "char *" в "LPCWSTR" c:\documents and settings\admin\мои документы\visual studio 2010\projects\port viewer\port viewer\port viewer.cpp 59 2 - Ошибка 3 error C2664: LoadLibraryW: невозможно преобразовать параметр 1 из "const char [13]" в "LPCWSTR" c:\documents and settings\admin\мои документы\visual studio 2010\projects\port viewer\port viewer\port viewer.cpp 102 Вот сам код : Код (Text): #include "stdafx.h" #include <WinSock2.h> #include <Windows.h> #include <stdio.h> #include <IPHlpApi.h> #include <conio.h> #include <TlHelp32.h> #include <Psapi.h> #pragma comment (lib, "Iphlpapi.lib") #pragma comment (lib, "Ws2_32.lib") #pragma comment (lib, "psapi.lib") typedef struct _MIB_TCPROW_EX { DWORD dwState; DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwRemoteAddr; DWORD dwRemotePort; DWORD dwProcessId; } MIB_TCPROW_EX, *PMIB_TCPROW_EX; typedef struct _MIB_TCPTABLE_EX { DWORD dwNumEntries; MIB_TCPROW_EX table[4096]; } MIB_TCPTABLE_EX, *PMIB_TCPTABLE_EX; typedef struct _MIB_UDPROW_EX { DWORD dwLocalAddr; DWORD dwLocalPort; DWORD dwProcessId; } MIB_UDPROW_EX, *PMIB_UDPROW_EX; typedef struct _MIB_UDPTABLE_EX { DWORD dwNumEntries; MIB_UDPROW_EX table[4096]; } MIB_UDPTABLE_EX, *PMIB_UDPTABLE_EX; typedef DWORD (WINAPI *PROCALLOCATEANDGETTCPEXTABLEFROMSTACK)(PMIB_TCPTABLE_EX*,BOOL,HANDLE,DWORD,DWORD); PROCALLOCATEANDGETTCPEXTABLEFROMSTACK lpfnAllocateAndGetTcpExTableFromStack = NULL; typedef DWORD (WINAPI *PROCALLOCATEANDGETUDPEXTABLEFROMSTACK)(PMIB_UDPTABLE_EX*,BOOL,HANDLE,DWORD,DWORD); PROCALLOCATEANDGETUDPEXTABLEFROMSTACK lpfnAllocateAndGetUdpExTableFromStack = NULL; BOOL GetPrivilege(char* SeNamePriv){ HANDLE hToken; LUID lpLuid; TOKEN_PRIVILEGES NewState; if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken)){ if(LookupPrivilegeValue(NULL, SeNamePriv, &lpLuid)){ NewState.PrivilegeCount = 1; NewState.Privileges[0].Luid = lpLuid; NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &NewState, sizeof(NewState), NULL, NULL); return TRUE; } CloseHandle(hToken); } return FALSE; } TCHAR *PrintProcessNameAndId(DWORD processID){ TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>"); HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID); if(NULL != hProcess){ HMODULE hMod; DWORD cbNeeded; if( EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded) ){ GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR) ); } } CloseHandle( hProcess ); return (TCHAR *)&szProcessName; } int _tmain(int argc, _TCHAR* argv[]) { PMIB_TCPTABLE_EX pTcpTableEx; PMIB_UDPTABLE_EX pUdpTableEx; DWORD dwSize = 0, dwSizeUDP = 0; DWORD i = 0, j = 0; DWORD dwTcpErr, dwUdpErr; DWORD pid; char *ip_ptr, *ip_udp_ptr; unsigned short *port_ptr, *port_udp_ptr; HMODULE hMudule; GetPrivilege("SeDebugPrivilege"); hMudule = LoadLibrary("Iphlpapi.dll"); if(hMudule == NULL) return 0; lpfnAllocateAndGetTcpExTableFromStack = (PROCALLOCATEANDGETTCPEXTABLEFROMSTACK)GetProcAddress(hMudule,"AllocateAndGetTcpExTableFromStack"); lpfnAllocateAndGetUdpExTableFromStack = (PROCALLOCATEANDGETUDPEXTABLEFROMSTACK)GetProcAddress(hMudule,"AllocateAndGetUdpExTableFromStack"); if(lpfnAllocateAndGetTcpExTableFromStack == NULL) return 0; if(lpfnAllocateAndGetUdpExTableFromStack == NULL) return 0; pTcpTableEx = (MIB_TCPTABLE_EX *) malloc(sizeof(MIB_TCPTABLE_EX)); if(pTcpTableEx == NULL){ printf("Can't Allocate Memory."); GlobalFree(pTcpTableEx); } pUdpTableEx = (MIB_UDPTABLE_EX *) malloc(sizeof(MIB_UDPTABLE_EX)); if(pUdpTableEx == NULL){ printf("can't Allocate Memory."); GlobalFree(pUdpTableEx); } dwTcpErr = lpfnAllocateAndGetTcpExTableFromStack(&pTcpTableEx, TRUE, GetProcessHeap(), 0, 2); dwUdpErr = lpfnAllocateAndGetUdpExTableFromStack(&pUdpTableEx, TRUE, GetProcessHeap(), 0, 2); if(dwTcpErr == ERROR_SUCCESS){ printf("\n\nOpened TCP Ports\n"); printf("------------------\n\n"); for(i = 0; i < pTcpTableEx->dwNumEntries; i++){ ip_ptr = (char *)&pTcpTableEx->table[i].dwLocalAddr; port_ptr = (unsigned short *)&pTcpTableEx->table[i].dwLocalPort; pid = pTcpTableEx->table[i].dwProcessId; if(pid == 4){ printf("%s:%ld <---> System\n",inet_ntoa(*(struct in_addr *)ip_ptr), htons(*port_ptr)); } else{ printf("%s:%ld <---> %s\n",inet_ntoa(*(struct in_addr *)ip_ptr),htons(*port_ptr),PrintProcessNameAndId(pid)); } } } if(dwUdpErr == ERROR_SUCCESS){ printf("\n\nOpened UDP Ports\n"); printf("----------------\n\n"); for(i=0; i<pUdpTableEx->dwNumEntries;i++) { ip_udp_ptr = (char *)&pUdpTableEx->table[i].dwLocalAddr; port_udp_ptr = (unsigned short *)&pUdpTableEx->table[i].dwLocalPort; pid = pUdpTableEx->table[i].dwProcessId; if(pid == 4) { printf("%s:%ld <---> System\n",inet_ntoa(*(struct in_addr *)ip_udp_ptr),htons(*port_udp_ptr)); } else { printf("%s:%ld <---> %s\n",inet_ntoa(*(struct in_addr *)ip_udp_ptr),htons(*port_udp_ptr),PrintProcessNameAndId(pid)); } } } printf("\n\nPress any key to exit...."); return 0; } Собственно где то накосил..... не огу увидеть где !
1) if(LookupPrivilegeValue(NULL, SeNamePriv, &lpLuid)){ надо if(LookupPrivilegeValueA(NULL, SeNamePriv, &lpLuid)){ Или настройки проекта на мультибайт переключите. 2) hMudule = LoadLibrary("Iphlpapi.dll"); исправляем на hMudule = LoadLibrary(L"Iphlpapi.dll"); Или опять же настройки проекта на мультибайт переключите. И вообще - прекращайте копипастить. И займитесь наконец изучением настроек студии, UNICODE строк и тп.