⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frontend.cpp

📁 wifi 无线网络路由协议OLSR linux下C代码
💻 CPP
字号:
/* * The olsr.org Optimized Link-State Routing daemon (olsrd) * Copyright (c) 2004, Thomas Lopatic (thomas@lopatic.de) * All rights reserved. * * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met: * * * Redistributions of source code must retain the above copyright  *   notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright  *   notice, this list of conditions and the following disclaimer in  *   the documentation and/or other materials provided with the  *   distribution. * * Neither the name of olsr.org, olsrd nor the names of its  *   contributors may be used to endorse or promote products derived  *   from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE  * POSSIBILITY OF SUCH DAMAGE. * * Visit http://www.olsr.org for more information. * * If you find this software useful feel free to make a donation * to the project. For more information see the website or contact * the copyright holders. * * $Id: Frontend.cpp,v 1.8 2007/03/27 03:01:06 tlopatic Exp $ */#include "stdafx.h"#include "Frontend.h"#include "FrontendDlg.h"#include "TrayIcon.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifBEGIN_MESSAGE_MAP(CFrontendApp, CWinApp)	//{{AFX_MSG_MAP(CFrontendApp)	//}}AFX_MSG	ON_COMMAND(ID_HELP, CWinApp::OnHelp)END_MESSAGE_MAP()CFrontendApp::CFrontendApp(){}CFrontendApp theApp;static int SetEnableRedirKey(unsigned long New){	HKEY Key;	unsigned long Type;	unsigned long Len;	unsigned long Old;		if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE,		"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters",		0, KEY_READ | KEY_WRITE, &Key) != ERROR_SUCCESS)		return -1;		Len = sizeof (Old);		if (::RegQueryValueEx(Key, "EnableICMPRedirect", NULL, &Type,		(unsigned char *)&Old, &Len) != ERROR_SUCCESS ||		Type != REG_DWORD)		Old = 1;		if (::RegSetValueEx(Key, "EnableICMPRedirect", 0, REG_DWORD,		(unsigned char *)&New, sizeof (New)))	{		::RegCloseKey(Key);		return -1;	}		::RegCloseKey(Key);	return Old;}BOOL CFrontendApp::InitInstance(){	int Res;	CCommandLineInfo CmdLineInfo;	ParseCommandLine(CmdLineInfo);	CFrontendDlg dlg;	tray_icon = new TrayIcon( dlg, AfxGetInstanceHandle() );	dlg.ConfigFile = CmdLineInfo.m_strFileName;	m_pMainWnd = &dlg;	Res = SetEnableRedirKey(0);	if (Res == 1)	{		Res = AfxMessageBox("- WARNING -\n\n"			"The OLSR software has just switched off the processing of incoming ICMP "			" redirect messages in your registry.\n\n"			" Please REBOOT your computer for this change to take effect.\n\n"			" Do you want to allow the OLSR software to reboot your computer now?\n\n"			" (Please say \"Yes\".)", MB_YESNO | MB_ICONEXCLAMATION);		if (Res == IDYES)		{			HANDLE Proc;			HMODULE Lib;			BOOL (*Open)(HANDLE, DWORD, HANDLE *);			BOOL (*Lookup)(char *, char *, LUID *);			BOOL (*Adjust)(HANDLE, BOOL, TOKEN_PRIVILEGES *, DWORD,				TOKEN_PRIVILEGES *, DWORD *);			HANDLE Token;			Proc = ::GetCurrentProcess();			Lib = ::LoadLibrary("advapi32.dll");			if (Lib != NULL)			{				Open = (BOOL (*)(HANDLE, DWORD, HANDLE *))					::GetProcAddress(Lib, "OpenProcessToken");				Lookup = (BOOL (*)(char *, char *, LUID *))					::GetProcAddress(Lib, "LookupPrivilegeValueA");				Adjust = (BOOL (*)(HANDLE, BOOL, TOKEN_PRIVILEGES *, DWORD,					TOKEN_PRIVILEGES *, DWORD *))					::GetProcAddress(Lib, "AdjustTokenPrivileges");				if (Open != NULL && Lookup != NULL && Adjust != NULL)				{					struct					{						DWORD Count;						LUID_AND_ATTRIBUTES Priv;					}					TokPriv;					Proc = ::GetCurrentProcess();					if (!Open(Proc, TOKEN_ALL_ACCESS, &Token))						AfxMessageBox("OpenProcessToken() failed.");					else if (!Lookup("", "SeShutdownPrivilege", &TokPriv.Priv.Luid))						AfxMessageBox("LookupPrivilegeValue() failed.");					else					{						TokPriv.Count = 1;						TokPriv.Priv.Attributes = SE_PRIVILEGE_ENABLED;						if (!Adjust(Token, FALSE, (TOKEN_PRIVILEGES *)&TokPriv,							0, NULL, NULL))							AfxMessageBox("AdjustTokenPrivilege() failed.");					}				}				::FreeLibrary(Lib);			}			::ExitWindowsEx(EWX_REBOOT, 0);			::TerminateProcess(Proc, 0);		}	}	RedirectStdHandles();	dlg.DoModal();	return FALSE;}unsigned int CFrontendApp::RedirectThreadFunc(void){	char Buff[1000];	int Len;	int Left, Right;	CString Line;	CString Int;	while (::ReadFile(OutRead, Buff, sizeof (Buff) - 1, (unsigned long *)&Len, NULL))	{		if (Len == 0)			break;		Left = 0;		for (Right = 0; Right < Len; Right++)		{			if (Buff[Right] != 13)				Buff[Left++] = Buff[Right];		}		Len = Left;		Left = 0;		for (Right = 0; Right < Len; Right++)		{			if (Buff[Right] == 10)			{				Buff[Right] = 0;				Line += (Buff + Left);				AfxMessageBox(Line);				Line.Empty();				Left = Right + 1;			}		}		Buff[Right] = 0;		Line += (Buff + Left);	}	AfxEndThread(0);	return 0;}static unsigned int RedirectThreadStub(void *Arg){	class CFrontendApp *This;	This = (class CFrontendApp *)Arg;	return This->RedirectThreadFunc();}struct IoInfo{	HANDLE Hand;	unsigned char Attr;	char Buff;#if defined _MT	int Flag;	CRITICAL_SECTION Lock;#endif};extern "C" struct IoInfo *__pioinfo[];extern "C" void win32_stdio_hack(unsigned int handle);int CFrontendApp::RedirectStdHandles(void){	SECURITY_ATTRIBUTES SecAttr;	HANDLE OutWrite;	struct IoInfo *Info;	SecAttr.nLength = sizeof (SECURITY_ATTRIBUTES);	SecAttr.lpSecurityDescriptor = NULL;	SecAttr.bInheritHandle = TRUE;	if (!::CreatePipe(&OutRead, &OutWrite, &SecAttr, 0))	{		AfxMessageBox("Cannot create stdout pipe.");		return -1;	}	AfxBeginThread(RedirectThreadStub, (void *)this);	Info = __pioinfo[0];	// Info[1].Hand = OutWrite;	// Info[1].Attr = 0x89; // FOPEN | FTEXT | FPIPE;	Info[2].Hand = OutWrite;	Info[2].Attr = 0x89;	// stdout->_file = 1;	stderr->_file = 2;	win32_stdio_hack((unsigned int)OutWrite);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -