Страница 19 из 24 Вариант2: #include #include #include #include #include void main() { int iAdapters,iOpt=sizeof(iAdapters),iSize=sizeof(SOCKADDR_IPX); SOCKET skNum; SOCKADDR_IPX Addr; WSADATA Wsa; if(WSAStartup(0x0101,&Wsa)) return; if ((skNum=socket(AF_IPX,SOCK_DGRAM, NSPROTO_IPX))!=INVALID_SOCKET) { memset(&Addr,0,sizeof(Addr)); Addr.sa_family=AF_IPX; if(bind(skNum,(SOCKADDR *)&Addr,iSize)!=SOCKET_ERROR) { if(getsockopt(skNum,NSPROTO_IPX,IPX_MAX_ADAPTER_NUM, (char *)&iAdapters,&iOpt)!=SOCKET_ERROR) { while(iAdapters) { IPX_ADDRESS_DATA Data; memset(&Data,0,sizeof(Data)); Data.adapternum=iAdapters-1; iOpt=sizeof(Data); if(getsockopt(skNum,NSPROTO_IPX,IPX_ADDRESS,(char *)&Data,&iOpt)!=SOCKET_ERROR) { printf("Addr: %02X%02X%02X%02X:%02X%02X%02X%02X%02X%02X\n", (int)Data.netnum[0],(int)Data.netnum[1],(int)Data.netnum[2], (int)Data.netnum[3],(int)Data.netnum[4],(int)Data.netnum[5], (int)Data.netnum[6],(int)Data.netnum[7],(int)Data.netnum[8], (int)Data.netnum[9]); } iAdapters--; } } } closesocket(skNum); } WSACleanup(); } Вариант3: From: MSDN #include #include #include #include #include typedef struct _ASTAT_ { ADAPTER_STATUS adapt; NAME_BUFFER NameBuff [30]; }ASTAT, * PASTAT; ASTAT Adapter; void main (void) { NCB Ncb; UCHAR uRetCode; char NetName[50]; memset( &Ncb, 0, sizeof(Ncb) ); Ncb.ncb_command = NCBRESET; Ncb.ncb_lana_num = 0; uRetCode = Netbios( &Ncb ); printf( "The NCBRESET return code is: 0x%x \n", uRetCode ); memset( &Ncb, 0, sizeof (Ncb) ); Ncb.ncb_command = NCBASTAT; Ncb.ncb_lana_num = 0; strcpy( Ncb.ncb_callname, "* " ); Ncb.ncb_buffer = (char *) &Adapter; Ncb.ncb_length = sizeof(Adapter); uRetCode = Netbios( &Ncb ); printf( "The NCBASTAT return code is: 0x%x \n", uRetCode ); if ( uRetCode == 0 ) { printf( "The Ethernet Number is: %02x%02x%02x%02x%02x%02x\n", Adapter.adapt.adapter_address[0], Adapter.adapt.adapter_address[1], Adapter.adapt.adapter_address[2], Adapter.adapt.adapter_address[3], Adapter.adapt.adapter_address[4], Adapter.adapt.adapter_address[5] ); } } 43)---------------------------------------------------------------------------- Q> Как сделать, чтобы мою прогу нельзя было бы убить? A> Я не пробовал,но imho от End Task это не спасет From : Dmitry V. Liseev Делать неубиваемый процесс очень просто. Перед тем, как убить винда сначала попытается завершить его по-хорошему. Тут он и должен запустить свою копию и передать ей все нужные данные перед благополучным завершением. LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { //HANDLE_MSG(hWnd, WM_CREATE, WndProc_OnCreate); HANDLE_MSG(hWnd, WM_DESTROY, WndProc_OnDestroy); //HANDLE_MSG(hWnd, WM_SIZE, WndProc_OnSize); //HANDLE_MSG(hWnd, WM_COMMAND, WndProc_OnCommand); default: return DefWindowProc(hWnd, msg, wParam, lParam); } } void WndProc_OnDestroy(HWND hWnd) { STARTUPINFO si; PROCESS_INFORMATION pi; // Создадим другой процесс, а этот благополучно завершим. memset(&si, 0, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); CreateProcess(NULL, "program.exe", NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, π); CloseHandle(pi.hThread); CloseHandle(pi.hProcess); PostQuitMessage(0); //return FORWARD_WM_DESTROY(hWnd, DefWindowProc); } |