本文整理匯總了C++中CoTaskMemFree函數的典型用法代碼示例。如果您正苦於以下問題:C++ CoTaskMemFree函數的具體用法?C++ CoTaskMemFree怎麽用?C++ CoTaskMemFree使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了CoTaskMemFree函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: SHFree
/*************************************************************************
* SHFree [SHELL32.195]
*
* Equivalent to CoTaskMemFree. Under Windows 9x this function could use
* the shell32 built-in "mini-COM" without the need to load ole32.dll -
* see SHLoadOLE for details.
*
* NOTES
* exported by ordinal
*
* SEE ALSO
* CoTaskMemFree, SHLoadOLE
*/
void WINAPI SHFree(LPVOID pv)
{
TRACE("%p\n",pv);
CoTaskMemFree(pv);
}
示例2: DEVENUM_ReadPinTypes
static void DEVENUM_ReadPinTypes(HKEY hkeyPinKey, REGFILTERPINS *rgPin)
{
HKEY hkeyTypes = NULL;
DWORD dwMajorTypes, i;
REGPINTYPES *lpMediaType = NULL;
DWORD dwMediaTypeSize = 0;
if (RegOpenKeyExW(hkeyPinKey, wszTypes, 0, KEY_READ, &hkeyTypes) != ERROR_SUCCESS)
return ;
if (RegQueryInfoKeyW(hkeyTypes, NULL, NULL, NULL, &dwMajorTypes, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
!= ERROR_SUCCESS)
{
RegCloseKey(hkeyTypes);
return ;
}
for (i = 0; i < dwMajorTypes; i++)
{
HKEY hkeyMajorType = NULL;
WCHAR wszMajorTypeName[64];
DWORD cName = sizeof(wszMajorTypeName) / sizeof(WCHAR);
DWORD dwMinorTypes, i1;
if (RegEnumKeyExW(hkeyTypes, i, wszMajorTypeName, &cName, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) continue;
if (RegOpenKeyExW(hkeyTypes, wszMajorTypeName, 0, KEY_READ, &hkeyMajorType) != ERROR_SUCCESS) continue;
if (RegQueryInfoKeyW(hkeyMajorType, NULL, NULL, NULL, &dwMinorTypes, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
!= ERROR_SUCCESS)
{
RegCloseKey(hkeyMajorType);
continue;
}
for (i1 = 0; i1 < dwMinorTypes; i1++)
{
WCHAR wszMinorTypeName[64];
CLSID *clsMajorType = NULL, *clsMinorType = NULL;
HRESULT hr;
cName = sizeof(wszMinorTypeName) / sizeof(WCHAR);
if (RegEnumKeyExW(hkeyMajorType, i1, wszMinorTypeName, &cName, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) continue;
clsMinorType = CoTaskMemAlloc(sizeof(CLSID));
if (!clsMinorType) continue;
clsMajorType = CoTaskMemAlloc(sizeof(CLSID));
if (!clsMajorType) goto error_cleanup_types;
hr = CLSIDFromString(wszMinorTypeName, clsMinorType);
if (FAILED(hr)) goto error_cleanup_types;
hr = CLSIDFromString(wszMajorTypeName, clsMajorType);
if (FAILED(hr)) goto error_cleanup_types;
if (rgPin->nMediaTypes == dwMediaTypeSize)
{
DWORD dwNewSize = dwMediaTypeSize + (dwMediaTypeSize < 2 ? 1 : dwMediaTypeSize / 2);
REGPINTYPES *lpNewMediaType;
lpNewMediaType = CoTaskMemRealloc(lpMediaType, sizeof(REGPINTYPES) * dwNewSize);
if (!lpNewMediaType) goto error_cleanup_types;
lpMediaType = lpNewMediaType;
dwMediaTypeSize = dwNewSize;
}
lpMediaType[rgPin->nMediaTypes].clsMajorType = clsMajorType;
lpMediaType[rgPin->nMediaTypes].clsMinorType = clsMinorType;
rgPin->nMediaTypes++;
continue;
error_cleanup_types:
if (clsMajorType) CoTaskMemFree(clsMajorType);
if (clsMinorType) CoTaskMemFree(clsMinorType);
}
RegCloseKey(hkeyMajorType);
}
RegCloseKey(hkeyTypes);
if (lpMediaType && !rgPin->nMediaTypes)
{
CoTaskMemFree(lpMediaType);
lpMediaType = NULL;
}
rgPin->lpMediaType = lpMediaType;
}
示例3: DEVENUM_RegisterLegacyAmFilters
//.........這裏部分代碼省略.........
HKEY hkeyInstance = NULL;
if (RegEnumKeyExW(hkeyFilter, i, wszFilterSubkeyName, &cName, NULL, NULL, NULL, NULL) != ERROR_SUCCESS) continue;
hr = DEVENUM_GetCategoryKey(&CLSID_LegacyAmFilterCategory, &hkeyCategoryBaseKey, wszRegKey, MAX_PATH);
if (FAILED(hr)) continue;
strcatW(wszRegKey, wszRegSeparator);
strcatW(wszRegKey, wszFilterSubkeyName);
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, wszRegKey, 0, KEY_READ, &hkeyInstance) == ERROR_SUCCESS)
{
RegCloseKey(hkeyInstance);
}
else
{
/* Filter is registered the IFilterMapper(1)-way in HKCR\Filter. Needs to be added to
* legacy am filter category. */
HKEY hkeyFilterClass = NULL;
REGFILTER2 rgf2;
CLSID clsidFilter;
WCHAR wszFilterName[MAX_PATH];
DWORD Type;
DWORD cbData;
HRESULT res;
IMoniker *pMoniker = NULL;
TRACE("Registering %s\n", debugstr_w(wszFilterSubkeyName));
strcpyW(wszRegKey, clsid_keyname);
strcatW(wszRegKey, wszRegSeparator);
strcatW(wszRegKey, wszFilterSubkeyName);
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, wszRegKey, 0, KEY_READ, &hkeyFilterClass) != ERROR_SUCCESS)
continue;
rgf2.dwVersion = 1;
rgf2.dwMerit = 0;
rgf2.u.s1.cPins = 0;
rgf2.u.s1.rgPins = NULL;
cbData = sizeof(wszFilterName);
if (RegQueryValueExW(hkeyFilterClass, NULL, NULL, &Type, (LPBYTE)wszFilterName, &cbData) != ERROR_SUCCESS ||
Type != REG_SZ)
goto cleanup;
cbData = sizeof(rgf2.dwMerit);
if (RegQueryValueExW(hkeyFilterClass, wszMeritName, NULL, &Type, (LPBYTE)&rgf2.dwMerit, &cbData) != ERROR_SUCCESS ||
Type != REG_DWORD)
goto cleanup;
DEVENUM_ReadPins(hkeyFilterClass, &rgf2);
res = CLSIDFromString(wszFilterSubkeyName, &clsidFilter);
if (FAILED(res)) goto cleanup;
IFilterMapper2_RegisterFilter(pMapper, &clsidFilter, wszFilterName, &pMoniker, NULL, NULL, &rgf2);
if (pMoniker)
IMoniker_Release(pMoniker);
cleanup:
if (hkeyFilterClass) RegCloseKey(hkeyFilterClass);
if (rgf2.u.s1.rgPins)
{
UINT iPin;
for (iPin = 0; iPin < rgf2.u.s1.cPins; iPin++)
{
CoTaskMemFree(rgf2.u.s1.rgPins[iPin].strName);
if (rgf2.u.s1.rgPins[iPin].lpMediaType)
{
UINT iType;
for (iType = 0; iType < rgf2.u.s1.rgPins[iPin].nMediaTypes; iType++)
{
CoTaskMemFree((void*)rgf2.u.s1.rgPins[iPin].lpMediaType[iType].clsMajorType);
CoTaskMemFree((void*)rgf2.u.s1.rgPins[iPin].lpMediaType[iType].clsMinorType);
}
CoTaskMemFree((void*)rgf2.u.s1.rgPins[iPin].lpMediaType);
}
}
CoTaskMemFree((void*)rgf2.u.s1.rgPins);
}
}
}
}
if (hkeyFilter) RegCloseKey(hkeyFilter);
if (pMapper)
IFilterMapper2_Release(pMapper);
return S_OK;
}
示例4: user_free
static void WINAPI user_free(void *p)
{
CoTaskMemFree(p);
}
示例5: AllocateCapability
//.........這裏部分代碼省略.........
WIA_DEV_CAP_DRV *pWIADeviceCapability = NULL;
hr = AllocateCapability(&pWIADeviceCapability);
if((SUCCEEDED(hr)&& (pWIADeviceCapability)))
{
pWIADeviceCapability->ulFlags = ulFlags;
*pWIADeviceCapability->guid = guidCapability;
CBasicStringWide cswCapabilityString;
//
// Load capability name from resource
//
if(cswCapabilityString.LoadString(uiNameResourceID,m_hInstance))
{
hr = StringCbCopyW(pWIADeviceCapability->wszName,
MAX_CAPABILITY_STRING_SIZE_BYTES,
cswCapabilityString.String());
if(FAILED(hr))
{
WIAS_ERROR((g_hInst, "Failed to copy source string (%ws) to destination string, hr = 0x%lx",cswCapabilityString.String(),hr));
}
}
else
{
hr = E_FAIL;
WIAS_ERROR((g_hInst, "Failed to load the device capability name string from DLL resource, hr = 0x%lx",hr));
}
//
// Load capability description from resource
//
if(cswCapabilityString.LoadString(uiDescriptionResourceID,m_hInstance))
{
hr = StringCbCopyW(pWIADeviceCapability->wszDescription,
MAX_CAPABILITY_STRING_SIZE_BYTES,
cswCapabilityString.String());
if(FAILED(hr))
{
WIAS_ERROR((g_hInst, "Failed to copy source string (%ws) to destination string, hr = 0x%lx",cswCapabilityString.String(),hr));
}
}
else
{
hr = E_FAIL;
WIAS_ERROR((g_hInst, "Failed to load the device capability description string from DLL resource, hr = 0x%lx",hr));
}
//
// Copy icon location string
//
cswCapabilityString = wszIcon;
if(cswCapabilityString.Length())
{
hr = StringCbCopyW(pWIADeviceCapability->wszIcon,
MAX_CAPABILITY_STRING_SIZE_BYTES,
cswCapabilityString.String());
if(FAILED(hr))
{
WIAS_ERROR((g_hInst, "Failed to copy source string (%ws) to destination string, hr = 0x%lx",cswCapabilityString.String(),hr));
}
}
else
{
hr = E_FAIL;
WIAS_ERROR((g_hInst, "Failed to load the device capability icon location string from DLL resource, hr = 0x%lx",hr));
}
if(SUCCEEDED(hr))
{
if((pWIADeviceCapability->ulFlags == WIA_NOTIFICATION_EVENT) ||
(pWIADeviceCapability->ulFlags == WIA_ACTION_EVENT))
{
//
// The capability being added is an event, so always add it to the beginning of the array
//
m_CapabilityArray.Insert(*pWIADeviceCapability,0);
}
else
{
//
// The capability being added is a command, so always add it to the end of the array
//
m_CapabilityArray.Append(*pWIADeviceCapability);
}
}
if(pWIADeviceCapability)
{
CoTaskMemFree(pWIADeviceCapability);
pWIADeviceCapability = NULL;
}
}
return hr;
}
示例6: VbglR3CredentialsQueryAvailability
/**
* Checks and retrieves credentials provided by the host + does account lookup on eventually
* renamed user accounts.
*
* @return IPRT status code.
*/
int VBoxCredProvCredential::RetrieveCredentials(void)
{
PRTUTF16 pwszUser = NULL;
PRTUTF16 pwszPassword = NULL;
PRTUTF16 pwszDomain = NULL;
int rc = VbglR3CredentialsQueryAvailability();
if (RT_SUCCESS(rc))
{
/*
* Set status to "terminating" to let the host know this module now
* tries to receive and use passed credentials so that credentials from
* the host won't be sent twice.
*/
VBoxCredProvReportStatus(VBoxGuestFacilityStatus_Terminating);
rc = VbglR3CredentialsRetrieveUtf16(&pwszUser, &pwszPassword, &pwszDomain);
VBoxCredProvVerbose(0, "VBoxCredProvCredential::RetrieveCredentials: Retrieved credentials with rc=%Rrc\n", rc);
}
if (RT_SUCCESS(rc))
{
VBoxCredProvVerbose(0, "VBoxCredProvCredential::RetrieveCredentials: Received credentials for user '%ls'\n", pwszUser);
/*
* In case we got a "display name" (e.g. "John Doe")
* instead of the real user name (e.g. "jdoe") we have
* to translate the data first ...
*/
PWSTR pwszExtractedName = NULL;
if ( TranslateAccountName(pwszUser, &pwszExtractedName)
&& pwszExtractedName)
{
VBoxCredProvVerbose(0, "VBoxCredProvCredential::RetrieveCredentials: Translated account name '%ls' -> '%ls'\n",
pwszUser, pwszExtractedName);
RTMemWipeThoroughly(pwszUser, (RTUtf16Len(pwszUser) + 1) * sizeof(RTUTF16), 3 /* Passes */);
RTUtf16Free(pwszUser);
pwszUser = RTUtf16Dup(pwszExtractedName);
CoTaskMemFree(pwszExtractedName);
pwszExtractedName = NULL;
}
else
{
/*
* Okay, no display name, but maybe it's a
* principal name from which we have to extract the domain from?
* ([email protected] -> jdoe in domain my-domain.sub.net.com.)
*/
PWSTR pwszExtractedDomain = NULL;
if (ExtractAccoutData(pwszUser, &pwszExtractedName, &pwszExtractedDomain))
{
/* Update user name. */
if (pwszExtractedName)
{
if (pwszUser)
{
RTMemWipeThoroughly(pwszUser, (RTUtf16Len(pwszUser) + 1) * sizeof(RTUTF16), 3 /* Passes */);
RTUtf16Free(pwszUser);
}
pwszUser = RTUtf16Dup(pwszExtractedName);
CoTaskMemFree(pwszExtractedName);
pwszExtractedName = NULL;
}
/* Update domain. */
if (pwszExtractedDomain)
{
if (pwszDomain)
{
RTMemWipeThoroughly(pwszDomain, (RTUtf16Len(pwszDomain) + 1) * sizeof(RTUTF16), 3 /* Passes */);
RTUtf16Free(pwszDomain);
}
pwszDomain = RTUtf16Dup(pwszExtractedDomain);
CoTaskMemFree(pwszExtractedDomain);
pwszExtractedDomain = NULL;
}
VBoxCredProvVerbose(0, "VBoxCredProvCredential::RetrieveCredentials: Extracted account name '%ls' + domain '%ls'\n",
pwszUser ? pwszUser : L"<NULL>", pwszDomain ? pwszDomain : L"<NULL>");
}
}
m_fHaveCreds = true;
}
if (m_fHaveCreds)
//.........這裏部分代碼省略.........
示例7: DirProc
static BOOL CALLBACK DirProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static int dontsetdefstyle;
page *thispage = g_this_page;
char *dir = g_usrvars[thispage->parms[4]];
int browse_text = thispage->parms[3];
if (uMsg == WM_NOTIFY_INIGO_MONTOYA)
{
GetUIText(IDC_DIR,dir);
validate_filename(dir);
#ifdef NSIS_CONFIG_LOG
#if !defined(NSIS_CONFIG_LOG_ODS) && !defined(NSIS_CONFIG_LOG_STDOUT)
build_g_logfile();
#endif
if (GetUIItem(IDC_CHECK1) != NULL)
log_dolog = IsDlgButtonChecked(hwndDlg,IDC_CHECK1);
#endif
}
if (uMsg == WM_INITDIALOG)
{
HWND hDir = GetUIItem(IDC_DIR);
#ifdef NSIS_CONFIG_LOG
if (GetAsyncKeyState(VK_SHIFT)&0x8000)
{
HWND h=GetUIItem(IDC_CHECK1);
SetUITextFromLang(IDC_CHECK1,LANG_LOG_INSTALL_PROCESS);
ShowWindow(h,SW_SHOWNA);
}
#endif
if (validpathspec(dir) && !skip_root(dir))
addtrailingslash(dir);
// workaround for bug #1209843
//
// m_curwnd is only updated once WM_INITDIALOG returns.
// my_SetWindowText triggers an EN_CHANGE message that
// triggers a WM_IN_UPDATEMSG message that uses m_curwnd
// to get the selected directory (GetUIText).
// because m_curwnd is still outdated, dir varialble is
// filled with an empty string. by default, dir points
// to $INSTDIR.
//
// to solve this, m_curwnd is manually set to the correct
// window handle.
m_curwnd=hwndDlg;
my_SetWindowText(hDir,dir);
SetUITextFromLang(IDC_BROWSE,this_page->parms[2]);
SetUITextFromLang(IDC_SELDIRTEXT,this_page->parms[1]);
SetActiveCtl(hDir);
{
typedef HRESULT (WINAPI *SHAutoCompletePtr)(HWND, DWORD);
SHAutoCompletePtr fSHAutoComplete;
fSHAutoComplete = (SHAutoCompletePtr) myGetProcAddress(MGA_SHAutoComplete);
if (fSHAutoComplete)
{
fSHAutoComplete(hDir, SHACF_FILESYSTEM);
}
}
}
if (uMsg == WM_COMMAND)
{
int id=LOWORD(wParam);
if (id == IDC_DIR && HIWORD(wParam) == EN_CHANGE)
{
uMsg = WM_IN_UPDATEMSG;
}
if (id == IDC_BROWSE)
{
static char bt[NSIS_MAX_STRLEN];
BROWSEINFO bi = {0,};
ITEMIDLIST *idlist;
bi.hwndOwner = hwndDlg;
bi.pszDisplayName = g_tmp;
bi.lpfn = BrowseCallbackProc;
bi.lParam = (LPARAM)dir;
bi.lpszTitle = GetNSISString(bt, browse_text);
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
idlist = SHBrowseForFolder(&bi);
if (idlist)
{
// free idlist
CoTaskMemFree(idlist);
addtrailingslash(dir);
if (g_header->install_directory_auto_append &&
dir == state_install_directory) // only append to $INSTDIR (bug #1174184)
{
const char *post_str = ps_tmpbuf;
GetNSISStringTT(g_header->install_directory_auto_append);
// display name gives just the folder name
if (lstrcmpi(post_str, g_tmp))
{
mystrcat(dir, post_str);
}
}
//.........這裏部分代碼省略.........
示例8: IExtractIconW_Constructor
/**************************************************************************
* IExtractIconW_Constructor
*/
IExtractIconW* IExtractIconW_Constructor(LPCITEMIDLIST pidl)
{
CComPtr<IDefaultExtractIconInit> initIcon;
IExtractIconW *extractIcon;
GUID const * riid;
int icon_idx;
UINT flags;
CHAR sTemp[MAX_PATH];
WCHAR wTemp[MAX_PATH];
LPITEMIDLIST pSimplePidl = ILFindLastID(pidl);
HRESULT hr;
hr = SHCreateDefaultExtractIcon(IID_PPV_ARG(IDefaultExtractIconInit,&initIcon));
if (FAILED(hr))
return NULL;
hr = initIcon->QueryInterface(IID_PPV_ARG(IExtractIconW,&extractIcon));
if (FAILED(hr))
return NULL;
if (_ILIsDesktop(pSimplePidl))
{
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_DESKTOP);
}
else if ((riid = _ILGetGUIDPointer(pSimplePidl)))
{
/* my computer and other shell extensions */
static const WCHAR fmt[] = { 'C', 'L', 'S', 'I', 'D', '\\',
'{', '%', '0', '8', 'l', 'x', '-', '%', '0', '4', 'x', '-', '%', '0', '4', 'x', '-',
'%', '0', '2', 'x', '%', '0', '2', 'x', '-', '%', '0', '2', 'x', '%', '0', '2', 'x',
'%', '0', '2', 'x', '%', '0', '2', 'x', '%', '0', '2', 'x', '%', '0', '2', 'x', '}', 0
};
WCHAR xriid[50];
swprintf(xriid, fmt,
riid->Data1, riid->Data2, riid->Data3,
riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3],
riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7]);
const WCHAR* iconname = NULL;
if (_ILIsBitBucket(pSimplePidl))
{
static const WCHAR szFull[] = {'F','u','l','l',0};
static const WCHAR szEmpty[] = {'E','m','p','t','y',0};
IEnumIDList *EnumIDList = NULL;
CoInitialize(NULL);
IShellFolder2 *psfRecycleBin = NULL;
IShellFolder *psfDesktop = NULL;
hr = SHGetDesktopFolder(&psfDesktop);
if (SUCCEEDED(hr))
hr = psfDesktop->BindToObject(pSimplePidl, NULL, IID_IShellFolder2, (void**) &psfRecycleBin);
if (SUCCEEDED(hr))
hr = psfRecycleBin->EnumObjects(NULL, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &EnumIDList);
ULONG itemcount;
LPITEMIDLIST pidl = NULL;
if (SUCCEEDED(hr) && (hr = EnumIDList->Next(1, &pidl, &itemcount)) == S_OK)
{
CoTaskMemFree(pidl);
iconname = szFull;
} else {
iconname = szEmpty;
}
if (psfDesktop)
psfDesktop->Release();
if (psfRecycleBin)
psfRecycleBin->Release();
if (EnumIDList)
EnumIDList->Release();
}
if (HCR_GetIconW(xriid, wTemp, iconname, MAX_PATH, &icon_idx))
{
initIcon->SetNormalIcon(wTemp, icon_idx);
}
else
{
if (IsEqualGUID(*riid, CLSID_MyComputer))
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_COMPUTER);
else if (IsEqualGUID(*riid, CLSID_MyDocuments))
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_DOCUMENTS);
else if (IsEqualGUID(*riid, CLSID_NetworkPlaces))
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_MY_NETWORK_PLACES);
else
initIcon->SetNormalIcon(swShell32Name, -IDI_SHELL_FOLDER);
}
}
else if (_ILIsDrive (pSimplePidl))
{
static const WCHAR drive[] = { 'D', 'r', 'i', 'v', 'e', 0 };
int icon_idx = -1;
if (_ILGetDrive(pSimplePidl, sTemp, MAX_PATH))
//.........這裏部分代碼省略.........
示例9: ATLTRACE
STDMETHODIMP CCUBRIDRowset::GetPendingRows(HCHAPTER hReserved, DBPENDINGSTATUS dwRowStatus,
DBCOUNTITEM *pcPendingRows, HROW **prgPendingRows,
DBPENDINGSTATUS **prgPendingStatus)
{
ATLTRACE(atlTraceDBProvider, 2, "CCUBRIDRowset::GetPendingRows\n");
ClearError();
if(m_nStatus==1) return RaiseError(E_UNEXPECTED, 1, __uuidof(IRowsetUpdate), L"This object is in a zombie state");
bool bPending = false;
CCUBRIDRowsetRow *pRow = NULL;
if(pcPendingRows)
{
*pcPendingRows = 0;
if(prgPendingRows) *prgPendingRows = NULL;
if(prgPendingStatus) *prgPendingStatus = NULL;
}
// Validate input parameters
if ((dwRowStatus &
~(DBPENDINGSTATUS_NEW | DBPENDINGSTATUS_CHANGED | DBPENDINGSTATUS_DELETED)) != 0)
return E_INVALIDARG;
// Determine how many rows we'll need to return
POSITION pos = m_rgRowHandles.GetStartPosition();
while( pos != NULL )
{
MapClass::CPair* pPair = m_rgRowHandles.GetNext( pos );
ATLASSERT( pPair != NULL );
// Check to see if a row has a pending status
pRow = pPair->m_value;
if (pRow->m_status & dwRowStatus)
{
if (pcPendingRows != NULL)
(*pcPendingRows)++;
bPending = true;
}
}
// In this case, there are no pending rows that match, just exit out
if (!bPending)
{
// There are no pending rows so exit immediately
return S_FALSE;
}
else
{
// Here' the consumer just wants to see if there are pending rows
// we know that so we can exit
if (pcPendingRows == NULL)
return S_OK;
}
// Allocate arrays for pending rows
{
if (prgPendingRows != NULL)
{
*prgPendingRows = (HROW*)CoTaskMemAlloc(*pcPendingRows * sizeof(HROW));
if (*prgPendingRows == NULL)
{
*pcPendingRows = 0;
return E_OUTOFMEMORY;
}
}
if (prgPendingStatus != NULL)
{
*prgPendingStatus = (DBPENDINGSTATUS*)CoTaskMemAlloc(*pcPendingRows * sizeof(DBPENDINGSTATUS));
if (*prgPendingStatus == NULL)
{
*pcPendingRows = 0;
CoTaskMemFree(*prgPendingRows);
*prgPendingRows = NULL;
return E_OUTOFMEMORY;
}
memset(*prgPendingStatus, 0, *pcPendingRows * sizeof(DBPENDINGSTATUS));
}
}
if (prgPendingRows || prgPendingStatus)
{
ULONG ulRows = 0;
pos = m_rgRowHandles.GetStartPosition();
while( pos != NULL )
{
MapClass::CPair* pPair = m_rgRowHandles.GetNext( pos );
ATLASSERT( pPair != NULL );
pRow = pPair->m_value;
if (pRow->m_status & dwRowStatus)
{
// Add the output row
pRow->AddRefRow();
if (prgPendingRows)
((*prgPendingRows)[ulRows]) = /*(HROW)*/pPair->m_key;
if (prgPendingStatus)
//.........這裏部分代碼省略.........
示例10: CoInitializeEx
bool CSoundComponent::InitXACT(const char* engine_xgs)
{
HRESULT hr;
CoInitializeEx( NULL, COINIT_MULTITHREADED ); // COINIT_APARTMENTTHREADED will work too
//TODO("Create the XACT engine");
hr=XACT3CreateEngine(0, &mpXEngine);
if( FAILED( hr ) || mpXEngine == NULL )
{
FAIL("Problems creating XACT engine","InitXACT Failed");
return false;
}
// Load the global settings file and pass it into XACTInitialize
VOID* pGlobalSettingsData = NULL;
DWORD dwGlobalSettingsFileSize = 0;
bool bSuccess = false;
HANDLE hFile = CreateFile( engine_xgs, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL );
if( hFile!=INVALID_HANDLE_VALUE )
{
dwGlobalSettingsFileSize = GetFileSize( hFile, NULL );
if( dwGlobalSettingsFileSize != INVALID_FILE_SIZE )
{
pGlobalSettingsData = CoTaskMemAlloc( dwGlobalSettingsFileSize );
if( pGlobalSettingsData )
{
DWORD dwBytesRead;
if( 0 != ReadFile( hFile, pGlobalSettingsData, dwGlobalSettingsFileSize, &dwBytesRead, NULL ) )
{
bSuccess = true;
}
}
}
CloseHandle( hFile );
}
if( !bSuccess )
{
if( pGlobalSettingsData )
CoTaskMemFree( pGlobalSettingsData );
pGlobalSettingsData = NULL;
dwGlobalSettingsFileSize = 0;
FAIL(engine_xgs,"Problems opening engine file");
return false;
}
// Initialize & create the XACT runtime
XACT_RUNTIME_PARAMETERS xrParams = {0};
xrParams.lookAheadTime = XACT_ENGINE_LOOKAHEAD_DEFAULT;
xrParams.pGlobalSettingsBuffer = pGlobalSettingsData;
xrParams.globalSettingsBufferSize = dwGlobalSettingsFileSize;
xrParams.globalSettingsFlags = XACT_FLAG_GLOBAL_SETTINGS_MANAGEDATA; // this will tell XACT to delete[] the buffer when its unneeded
//TODO(Initalise the XACT engine);
hr=mpXEngine->Initialize(&xrParams);
if( FAILED( hr ) )
{
FAIL(engine_xgs,"Problems Initalising XACT engine");
return false;
}
X3DAUDIO_EMITTER emitter = {0};
X3DAUDIO_LISTENER listener = {0};
listener.OrientFront = D3DXVECTOR3( 0, 0, 1 );
listener.OrientTop = D3DXVECTOR3( 0, 1, 0 );
listener.Position = D3DXVECTOR3( 0, 0, 0 );
listener.Velocity = D3DXVECTOR3( 0, 0, 0 );
// the following need to be orthonormal
emitter.OrientFront = D3DXVECTOR3( 0, 0, 1 );
emitter.OrientTop = D3DXVECTOR3( 0, 1, 0 );
emitter.Position = D3DXVECTOR3( 0, 0, 0 );
emitter.Velocity = D3DXVECTOR3( 0, 0, 0 ); // needs to not be zero if you want to hear Doppler effect
// emitter ChannelCount and DSP Setting's SrcChannelCount must match
emitter.ChannelCount = 2;
// this will be set by XACT3DCalculate if ChannelCount > 1.
emitter.ChannelRadius = 1.0f;
// will be set by XACT3DCalculate
emitter.pChannelAzimuths = NULL;
// will be set by XACT3DCalculate
emitter.pVolumeCurve = emitter.pLFECurve
= emitter.pLPFDirectCurve
= emitter.pLPFReverbCurve
= emitter.pReverbCurve
= NULL;
emitter.CurveDistanceScaler = 1.0;
emitter.DopplerScaler = 1.0f;
hr = XACT3DInitialize(mpXEngine, xact3dInstance);
if( FAILED( hr ) )
{
FAIL(engine_xgs,"Problems Initalising XACT 3D engine");
return false;
}
//.........這裏部分代碼省略.........
示例11: FindRFCOMMChannel
HRESULT FindRFCOMMChannel (unsigned char *pStream, int cStream,
unsigned long *nChannel)
{
ISdpRecord **pRecordArg = NULL;
int cRecordArg = 0;
ISdpStream *pIStream = NULL;
HRESULT hr = 0;
ULONG ulError = 0;
*nChannel = 0;
hr = CoCreateInstance(__uuidof(SdpStream),NULL,
CLSCTX_INPROC_SERVER,
__uuidof(ISdpStream),(LPVOID *)
&pIStream);
if ( FAILED(hr) || pIStream == NULL )
return hr;
hr = pIStream->Validate (pStream, cStream,&ulError);
if (SUCCEEDED(hr))
{
hr = pIStream->VerifySequenceOf(pStream, cStream,
SDP_TYPE_SEQUENCE,NULL,
(ULONG *)&cRecordArg);
if (SUCCEEDED(hr) && cRecordArg > 0)
{
pRecordArg =
(ISdpRecord **) CoTaskMemAlloc(sizeof(ISdpRecord*)
* cRecordArg);
if (pRecordArg != NULL)
{
hr =
pIStream->RetrieveRecords(pStream, cStream,
pRecordArg,(ULONG *)
&cRecordArg);
if ( FAILED(hr) )
{
CoTaskMemFree(pRecordArg);
pRecordArg = NULL;
cRecordArg = 0;
}
}
else
{
hr = E_OUTOFMEMORY;
}
}
}
if (pIStream != NULL)
{
pIStream->Release();
pIStream = NULL;
}
if ( FAILED(hr) )
return hr;
for (int i = 0; (*nChannel == 0) && (i < cRecordArg); i++)
{
ISdpRecord *pRecord = pRecordArg[i];
// contains SDP_ATTRIB_PROTOCOL_DESCRIPTOR_LIST data,
// if available
NodeData protocolList;
if (ERROR_SUCCESS !=
pRecord->GetAttribute(SDP_ATTRIB_PROTOCOL_DESCRIPTOR_LIST,
&protocolList) ||
(protocolList.type !=
SDP_TYPE_CONTAINER))
{
if (protocolList.type == SDP_TYPE_STRING)
CoTaskMemFree(protocolList.u.str.val);
else if (protocolList.type == SDP_TYPE_URL)
CoTaskMemFree(protocolList.u.url.val);
continue;
}
ISdpNodeContainer *pRecordContainer = protocolList.u.container;
int cProtocols = 0;
NodeData protocolDescriptor;
pRecordContainer->GetNodeCount((DWORD *)&cProtocols);
for (int j = 0; (nChannel == 0) && (j < cProtocols); j++)
{
pRecordContainer->GetNode(j,&protocolDescriptor);
if (protocolDescriptor.type != SDP_TYPE_CONTAINER)
continue;
ISdpNodeContainer *pProtocolContainer =
protocolDescriptor.u.container;
int cProtocolAtoms = 0;
pProtocolContainer->GetNodeCount((DWORD *)&cProtocolAtoms);
//.........這裏部分代碼省略.........
示例12: Muxer
void CDSMMuxerFilter::MuxHeader(IBitStream* pBS)
{
CString muxer;
muxer.Format(_T("DSM Muxer (%s)"), CString(__TIMESTAMP__));
SetProperty(L"MUXR", CStringW(muxer));
SetProperty(L"DATE", CStringW(CTime::GetCurrentTime().FormatGmt(_T("%Y-%m-%d %H:%M:%S"))));
MuxFileInfo(pBS);
POSITION pos = m_pPins.GetHeadPosition();
while(pos)
{
CBaseMuxerInputPin* pPin = m_pPins.GetNext(pos);
const CMediaType& mt = pPin->CurrentMediaType();
ASSERT((mt.lSampleSize >> 30) == 0); // you don't need >1GB samples, do you?
MuxPacketHeader(pBS, DSMP_MEDIATYPE, 5 + sizeof(GUID)*3 + mt.FormatLength());
pBS->BitWrite(pPin->GetID(), 8);
pBS->ByteWrite(&mt.majortype, sizeof(mt.majortype));
pBS->ByteWrite(&mt.subtype, sizeof(mt.subtype));
pBS->BitWrite(mt.bFixedSizeSamples, 1);
pBS->BitWrite(mt.bTemporalCompression, 1);
pBS->BitWrite(mt.lSampleSize, 30);
pBS->ByteWrite(&mt.formattype, sizeof(mt.formattype));
pBS->ByteWrite(mt.Format(), mt.FormatLength());
MuxStreamInfo(pBS, pPin);
}
// resources & chapters
CInterfaceList<IDSMResourceBag> pRBs;
pRBs.AddTail(this);
CComQIPtr<IDSMChapterBag> pCB = (IUnknown*)(INonDelegatingUnknown*)this;
pos = m_pPins.GetHeadPosition();
while(pos)
{
for(CComPtr<IPin> pPin = m_pPins.GetNext(pos)->GetConnected(); pPin; pPin = GetUpStreamPin(GetFilterFromPin(pPin)))
{
if(m_fAutoRes)
{
CComQIPtr<IDSMResourceBag> pPB = GetFilterFromPin(pPin);
if(pPB && !pRBs.Find(pPB)) pRBs.AddTail(pPB);
}
if(m_fAutoChap)
{
if(!pCB || pCB->ChapGetCount() == 0) pCB = GetFilterFromPin(pPin);
}
}
}
// resources
pos = pRBs.GetHeadPosition();
while(pos)
{
IDSMResourceBag* pRB = pRBs.GetNext(pos);
for(DWORD i = 0, j = pRB->ResGetCount(); i < j; i++)
{
CComBSTR name, desc, mime;
BYTE* pData = NULL;
DWORD len = 0;
if(SUCCEEDED(pRB->ResGet(i, &name, &desc, &mime, &pData, &len, NULL)))
{
CStringA utf8_name = UTF16To8(name);
CStringA utf8_desc = UTF16To8(desc);
CStringA utf8_mime = UTF16To8(mime);
MuxPacketHeader(pBS, DSMP_RESOURCE,
1 +
utf8_name.GetLength()+1 +
utf8_desc.GetLength()+1 +
utf8_mime.GetLength()+1 +
len);
pBS->BitWrite(0, 2);
pBS->BitWrite(0, 6); // reserved
pBS->ByteWrite(utf8_name, utf8_name.GetLength()+1);
pBS->ByteWrite(utf8_desc, utf8_desc.GetLength()+1);
pBS->ByteWrite(utf8_mime, utf8_mime.GetLength()+1);
pBS->ByteWrite(pData, len);
CoTaskMemFree(pData);
}
}
}
// chapters
if(pCB)
{
CAtlList<CDSMChapter> chapters;
REFERENCE_TIME rtPrev = 0;
int len = 0;
//.........這裏部分代碼省略.........
示例13: sizeof
BOOL CPPageFormats::SetFileAssociation(CString strExt, CString strProgID, bool fRegister)
{
CString extoldreg, extOldIcon;
CRegKey key;
HRESULT hr = S_OK;
TCHAR buff[256];
ULONG len = sizeof(buff)/sizeof(buff[0]);
memset(buff, 0, sizeof(buff));
if (m_pAAR == NULL) {
// Default manager (requiered at least Vista)
HRESULT hr = CoCreateInstance(CLSID_ApplicationAssociationRegistration,
NULL,
CLSCTX_INPROC,
__uuidof(IApplicationAssociationRegistration),
(void**)&m_pAAR);
UNUSED_ALWAYS(hr);
}
if (m_pAAR) {
// The Vista way
CString strNewApp;
if (fRegister) {
// Create non existing file type
if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strExt)) {
return false;
}
WCHAR* pszCurrentAssociation;
// Save current application associated
if (SUCCEEDED (m_pAAR->QueryCurrentDefault (strExt, AT_FILEEXTENSION, AL_EFFECTIVE, &pszCurrentAssociation))) {
if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID)) {
return false;
}
key.SetStringValue(g_strOldAssoc, pszCurrentAssociation);
// Get current icon for file type
/*
if (ERROR_SUCCESS == key.Open(HKEY_CLASSES_ROOT, CString(pszCurrentAssociation) + _T("\\DefaultIcon")))
{
len = sizeof(buff);
memset(buff, 0, len);
if (ERROR_SUCCESS == key.QueryStringValue(NULL, buff, &len) && !CString(buff).Trim().IsEmpty())
{
if (ERROR_SUCCESS == key.Create(HKEY_CLASSES_ROOT, strProgID + _T("\\DefaultIcon")))
key.SetStringValue (NULL, buff);
}
}
*/
CoTaskMemFree (pszCurrentAssociation);
}
strNewApp = g_strRegisteredAppName;
} else {
if (ERROR_SUCCESS != key.Open(HKEY_CLASSES_ROOT, strProgID)) {
return false;
}
if (ERROR_SUCCESS == key.QueryStringValue(g_strOldAssoc, buff, &len)) {
strNewApp = buff;
}
// TODO : retrieve registered app name from previous association (or find Bill function for that...)
}
hr = m_pAAR->SetAppAsDefault(strNewApp, strExt, AT_FILEEXTENSION);
} else {
// The 2000/XP way
if (fRegister) {
// Set new association
if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strExt)) {
return false;
}
len = sizeof(buff)/sizeof(buff[0]);
memset(buff, 0, sizeof(buff));
if (ERROR_SUCCESS == key.QueryStringValue(NULL, buff, &len) && !CString(buff).Trim().IsEmpty()) {
extoldreg = buff;
}
if (ERROR_SUCCESS != key.SetStringValue(NULL, strProgID)) {
return false;
}
// Get current icon for file type
/*
if (!extoldreg.IsEmpty())
{
if (ERROR_SUCCESS == key.Open(HKEY_CLASSES_ROOT, extoldreg + _T("\\DefaultIcon")))
{
len = sizeof(buff);
memset(buff, 0, len);
if (ERROR_SUCCESS == key.QueryStringValue(NULL, buff, &len) && !CString(buff).Trim().IsEmpty())
extOldIcon = buff;
}
}
*/
// Save old association
if (ERROR_SUCCESS != key.Create(HKEY_CLASSES_ROOT, strProgID)) {
return false;
//.........這裏部分代碼省略.........
示例14: DPA_Create
HRESULT CMenuSFToolbar::FillToolbar(BOOL clearFirst)
{
HRESULT hr;
CComPtr<IEnumIDList> eidl;
hr = m_shellFolder->EnumObjects(GetToolbar(), SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, &eidl);
if (FAILED_UNEXPECTEDLY(hr))
return hr;
HDPA dpaSort = DPA_Create(10);
LPITEMIDLIST item = NULL;
hr = eidl->Next(1, &item, NULL);
while (hr == S_OK)
{
if (m_menuBand->_CallCBWithItemPidl(item, 0x10000000, 0, 0) == S_FALSE)
{
DPA_AppendPtr(dpaSort, ILClone(item));
}
hr = eidl->Next(1, &item, NULL);
}
// If no items were added, show the "empty" placeholder
if (DPA_GetPtrCount(dpaSort) == 0)
{
DPA_Destroy(dpaSort);
return AddPlaceholder();
}
TRACE("FillToolbar added %d items to the DPA\n", DPA_GetPtrCount(dpaSort));
DPA_Sort(dpaSort, PidlListSort, (LPARAM) m_shellFolder.p);
for (int i = 0; i<DPA_GetPtrCount(dpaSort);)
{
PWSTR MenuString;
INT index = 0;
INT indexOpen = 0;
STRRET sr = { STRRET_CSTR, { 0 } };
item = (LPITEMIDLIST)DPA_GetPtr(dpaSort, i);
hr = m_shellFolder->GetDisplayNameOf(item, SIGDN_NORMALDISPLAY, &sr);
if (FAILED_UNEXPECTEDLY(hr))
{
DPA_Destroy(dpaSort);
return hr;
}
StrRetToStr(&sr, NULL, &MenuString);
index = SHMapPIDLToSystemImageListIndex(m_shellFolder, item, &indexOpen);
LPCITEMIDLIST itemc = item;
SFGAOF attrs = SFGAO_FOLDER;
hr = m_shellFolder->GetAttributesOf(1, &itemc, &attrs);
DWORD_PTR dwData = reinterpret_cast<DWORD_PTR>(item);
// Fetch next item already, so we know if the current one is the last
i++;
AddButton(i, MenuString, attrs & SFGAO_FOLDER, index, dwData, i >= DPA_GetPtrCount(dpaSort));
CoTaskMemFree(MenuString);
}
DPA_Destroy(dpaSort);
return hr;
}
示例15: runProgram
int controlyPlugin::launchItem(QList<InputData>* id, CatItem* item)
{
item = item; // Compiler warning
if (id->count() == 1) {
// no parameters, just the item itsef
QString path = item->fullPath;
if (path.contains(",@")) {
// dll cpl item indexing containing items, e.g. 'main.cpl,@1'
runProgram("control.exe", item->fullPath); //runProgram(cmd, args);
// use toNativeSeparators()?
} else if ((path.startsWith("csidl:", Qt::CaseInsensitive)) && (path.endsWith(".controly", Qt::CaseSensitive))) {
// Constant special item ID list (CSIDL)
// shell instance object (special shell extension folder), e.g. 'csidl:0x0014.controly' ('shellinstance:0x0014')
QString folderId = path.mid(strlen("csidl:"), strlen(path.toAscii())-strlen("csidl:")-strlen(".controly")); // e.g. 0x0014 = CSIDL_FONTS;
bool ok;
int folderIdx = folderId.toLong(&ok, 16);
if (ok) {
LPITEMIDLIST pidl;
HRESULT hres = SHGetFolderLocation(NULL, folderIdx, NULL, 0, &pidl);
if (hres == S_OK) {
SHELLEXECUTEINFO sei;
memset(&sei, 0, sizeof(sei));
sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_IDLIST;
sei.hwnd = NULL;
sei.lpVerb = NULL;
sei.lpFile = NULL;
sei.lpParameters = NULL;
sei.lpDirectory = NULL;
sei.nShow = SW_SHOW;
sei.hInstApp = NULL;
sei.lpIDList = pidl;
sei.hProcess = NULL;
//it seems we don't need CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
ShellExecuteEx(&sei);
CoTaskMemFree((void*)pidl); // needs objbase.h/ole32.lib
}
}
} else {
// exe cpl item with command line parameters, e.g. 'rundll32.exe shell32.dll,Options_RunDLL 1'
// or item defined via application name, e.g. 'control.exe /name Microsoft.WindowsUpdate'
QStringList spl = path.split(".exe ");
if (spl.size() == 2) {
// split size currently is always 2, as assured above
QString executable = spl[0] + ".exe";
QString parameters = spl[1];
runProgram(executable, parameters);
} else {
runProgram(path, "");
}
}
return 1;
}
if (id->count() != 2)
return 1;
CatItem last = id->last().getTopResult();
QSettings* set = *settings;
if (set == NULL) return 1;
if (last.shortName == "Options") {
set->setValue("controly/OptionsCount", set->value("controly/OptionsCount",0).toInt() + 1);
return MSG_CONTROL_OPTIONS;
}
else if (last.shortName == "Rebuild Index") {
set->setValue("controly/RebuildCount", set->value("controly/RebuildCount",0).toInt() + 1);
return MSG_CONTROL_REBUILD;
}
else if (last.shortName == "Exit") {
set->setValue("controly/ExitCount", set->value("controly/ExitCount",0).toInt() + 1);
return MSG_CONTROL_EXIT;
}
return 1;
}