FORCEINLINE BOOLEAN FxIrp::IsCurrentIrpStackLocationValid( VOID ) { return (GetCurrentIrpStackLocationIndex() <= GetStackCount()); }
HRESULT dhExitEx(HRESULT hr, BOOL bDispatchError, LPCWSTR szMember, LPCWSTR szCompleteMember, EXCEPINFO * pExcepInfo, UINT iArgError, LPCWSTR szFunctionName) { UINT nStackCount = GetStackCount(); SetStackCount(nStackCount - 1); if (FAILED(hr) && !g_ExceptionOptions.bDisableRecordExceptions) { PDH_EXCEPTION pException = GetExceptionPtr(); if (!pException) { pException = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DH_EXCEPTION)); if (!pException) return hr; SetExceptionPtr(pException); } else if (pException->bOld) { SysFreeString(pException->szDescription); SysFreeString(pException->szSource); SysFreeString(pException->szHelpFile); ZeroMemory(pException, sizeof(DH_EXCEPTION)); } if (pException->hr == 0) { pException->hr = hr; pException->iArgError = iArgError; pException->szErrorFunction = szFunctionName; pException->bDispatchError = bDispatchError; if (szMember) hlprStringCchCopyW(pException->szMember, ARRAYSIZE(pException->szMember), szMember); if (pExcepInfo && hr == DISP_E_EXCEPTION) { if (pExcepInfo->pfnDeferredFillIn && !IsBadCodePtr((FARPROC) pExcepInfo->pfnDeferredFillIn)) pExcepInfo->pfnDeferredFillIn(pExcepInfo); pException->szDescription = pExcepInfo->bstrDescription; pException->szSource = pExcepInfo->bstrSource; pException->szHelpFile = pExcepInfo->bstrHelpFile; pException->dwHelpContext = pExcepInfo->dwHelpContext; pException->swCode = (pExcepInfo->wCode ? pExcepInfo->wCode : pExcepInfo->scode); } } if (nStackCount == 1) { pException->bOld = TRUE; pException->szInitialFunction = szFunctionName; if (szCompleteMember) hlprStringCchCopyW(pException->szCompleteMember, ARRAYSIZE(pException->szCompleteMember), szCompleteMember); if (g_ExceptionOptions.bShowExceptions) dhShowException(pException); if (g_ExceptionOptions.pfnExceptionCallback) g_ExceptionOptions.pfnExceptionCallback(pException); } } else if (hr == DISP_E_EXCEPTION && pExcepInfo) { SysFreeString(pExcepInfo->bstrDescription); SysFreeString(pExcepInfo->bstrSource); SysFreeString(pExcepInfo->bstrHelpFile); } return hr; }
void dhEnter(void) { CheckTlsInitialized(); SetStackCount(GetStackCount() + 1); }
void Item::SaveToDB(int8 containerslot, int8 slot, bool firstsave, QueryBuffer* buf) { if (!m_isDirty && !firstsave) return; uint64 GiftCreatorGUID = GetGiftCreatorGUID(); uint64 CreatorGUID = GetCreatorGUID(); std::stringstream ss; ss << "DELETE FROM playeritems WHERE guid = " << GetLowGUID() << ";"; if (firstsave) CharacterDatabase.WaitExecute(ss.str().c_str()); else { if (buf == NULL) CharacterDatabase.Execute(ss.str().c_str()); else buf->AddQueryNA(ss.str().c_str()); } ss.rdbuf()->str(""); uint64 ownerGUID = GetOwnerGUID(); ss << "INSERT INTO playeritems VALUES("; ss << (Arcemu::Util::GUID_LOPART(ownerGUID)) << ","; ss << GetLowGUID() << ","; ss << GetEntry() << ","; ss << wrapped_item_id << ","; ss << (Arcemu::Util::GUID_LOPART(GiftCreatorGUID)) << ","; ss << (Arcemu::Util::GUID_LOPART(CreatorGUID)) << ","; ss << GetStackCount() << ","; ss << int32(GetChargesLeft()) << ","; ss << uint32(m_uint32Values[ITEM_FIELD_FLAGS]) << ","; ss << random_prop << ", " << random_suffix << ", "; ss << 0 << ","; ss << GetDurability() << ","; ss << static_cast<int>(containerslot) << ","; ss << static_cast<int>(slot) << ",'"; // Pack together enchantment fields if (Enchantments.size() > 0) { EnchantmentMap::iterator itr = Enchantments.begin(); for (; itr != Enchantments.end(); ++itr) { if (itr->second.RemoveAtLogout) continue; uint32 elapsed_duration = uint32(UNIXTIME - itr->second.ApplyTime); int32 remaining_duration = itr->second.Duration - elapsed_duration; if (remaining_duration < 0) remaining_duration = 0; if (itr->second.Enchantment && (remaining_duration > 5 || itr->second.Duration == 0)) { ss << itr->second.Enchantment->Id << ","; ss << remaining_duration << ","; ss << itr->second.Slot << ";"; } } } ss << "','"; ss << ItemExpiresOn << "','"; ////////////////////////////////////////////////// Refund stuff ///////////////////////////////// // Check if the owner is instantiated. When sending mail he/she obviously will not be :P if (this->GetOwner() != NULL) { std::pair< time_t, uint32 > refundentry; refundentry.first = 0; refundentry.second = 0; refundentry = this->GetOwner()->GetItemInterface()->LookupRefundable(this->GetGUID()); ss << uint32(refundentry.first) << "','"; ss << uint32(refundentry.second); } else { ss << uint32(0) << "','"; ss << uint32(0); } ///////////////////////////////////////////////////////////////////////////////////////////////// ss << "','"; ss << text; ss << "')"; if (firstsave) CharacterDatabase.WaitExecute(ss.str().c_str()); else { if (buf == NULL) CharacterDatabase.Execute(ss.str().c_str()); else buf->AddQueryNA(ss.str().c_str()); } m_isDirty = false; }
/* ************************************************************************** * dhExitEx: * This function is called when exiting a DispHelper function. * * Parameter Info: * bDispatchError - TRUE if the error was returned from the IDispatch interface. * szMember - The member name that caused the error. eg. "TypeText" * szCompleteMember - The complete member. eg. "Selection.TypeText(%S)" * pExcepInfo - A pointer to the EXCEPINFO structure returned by IDispatch::Invoke. * iArgError - The index of the argument that caused the error as returned by Invoke. * szFunctionName - The function which is exiting(string must have global life time). * * Notes: * szMember, szCompleteMember, pExcepInfo and iArgError are NULL or 0 if not available. * ============================================================================ */ HRESULT dhExitEx(HRESULT hr, BOOL bDispatchError, LPCWSTR szMember, LPCWSTR szCompleteMember, EXCEPINFO * pExcepInfo, UINT iArgError, LPCWSTR szFunctionName) { UINT nStackCount = GetStackCount(); SetStackCount(nStackCount - 1); if (FAILED(hr) && !g_ExceptionOptions.bDisableRecordExceptions) { PDH_EXCEPTION pException = GetExceptionPtr(); if (!pException) /* No exception allocated for this thread yet */ { pException = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DH_EXCEPTION)); if (!pException) return hr; SetExceptionPtr(pException); } else if (pException->bOld) /* Exception is from a former call */ { SysFreeString(pException->szDescription); SysFreeString(pException->szSource); SysFreeString(pException->szHelpFile); ZeroMemory(pException, sizeof(DH_EXCEPTION)); } if (pException->hr == 0) { /* Only record the error information the first time it is reported */ pException->hr = hr; pException->iArgError = iArgError; pException->szErrorFunction = szFunctionName; pException->bDispatchError = bDispatchError; if (szMember) hlprStringCchCopyW(pException->szMember, ARRAYSIZE(pException->szMember), szMember); if (pExcepInfo && hr == DISP_E_EXCEPTION) { /* Extract error info returned by IDispatch::Invoke in an EXCEPINFO */ if (pExcepInfo->pfnDeferredFillIn && !IsBadCodePtr((FARPROC) pExcepInfo->pfnDeferredFillIn)) pExcepInfo->pfnDeferredFillIn(pExcepInfo); pException->szDescription = pExcepInfo->bstrDescription; pException->szSource = pExcepInfo->bstrSource; pException->szHelpFile = pExcepInfo->bstrHelpFile; pException->dwHelpContext = pExcepInfo->dwHelpContext; pException->swCode = (pExcepInfo->wCode ? pExcepInfo->wCode : pExcepInfo->scode); } } if (nStackCount == 1) /* We are exiting the outer most function */ { pException->bOld = TRUE; pException->szInitialFunction = szFunctionName; if (szCompleteMember) hlprStringCchCopyW(pException->szCompleteMember, ARRAYSIZE(pException->szCompleteMember), szCompleteMember); if (g_ExceptionOptions.bShowExceptions) dhShowException(pException); if (g_ExceptionOptions.pfnExceptionCallback) g_ExceptionOptions.pfnExceptionCallback(pException); } } else if (hr == DISP_E_EXCEPTION && pExcepInfo) { /* We are responsible for cleaning up pExcepInfo even if we don't use it */ SysFreeString(pExcepInfo->bstrDescription); SysFreeString(pExcepInfo->bstrSource); SysFreeString(pExcepInfo->bstrHelpFile); } return hr; }