Exemple #1
0
LPSTR WINAPI StringDupA(_In_ HANDLE hHeap, _In_ LPCSTR lpszString)
{
	LPSTR lpszCopy;
	size_t cbCopy;
	HRESULT hr;

	if (!lpszString)
		return NULL;

	hr = StringCbLengthA(lpszString, (STRSAFE_MAX_CCH-1) * sizeof(CHAR), &cbCopy);
	if (FAILED(hr))
		return NULL;

	if ((cbCopy + sizeof(CHAR)) <= cbCopy)
		return NULL;

	cbCopy += sizeof(CHAR);
	lpszCopy = (LPSTR) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, cbCopy);
	if (!lpszCopy)
		return NULL;

	hr = StringCbCopyNA(lpszCopy, cbCopy, lpszString, cbCopy);
	if (FAILED(hr)) {
		HeapSafeFree(hHeap, 0, lpszCopy);
		return NULL;
	}

	return lpszCopy;
}
STDMETHODIMP CContextMenuHandler::GetCommandString(UINT_PTR idCmd, UINT uType, UINT *pReserved, LPSTR pszName,UINT cchMax)
{
#ifdef DEBUG_TO_LOG_FILES
	char	tbuf[200];
	sprintf_s(tbuf,200,__FUNCTION__ ": cmd=%lu, type=%u, name=%s",(DWORD)idCmd,uType,pszName);
	f_log(tbuf);
#endif

	HRESULT  hr = E_INVALIDARG;

	const char *aHelp = "";
	size_t aHelpSize = 0;
	const wchar_t *wHelp = L"";
	size_t wHelpSize = 0;

	const char *aVerb = "";
	size_t aVerbSize = 0;
	const wchar_t *wVerb = L"";
	size_t wVerbSize = 0;

	if (idCmd == m_idCmdFirst + eMC_RunConsole) {
		aHelp = szDescrRunConsoleA;
		aHelpSize = sizeof(szDescrRunConsoleA);

		wHelp = szDescrRunConsoleW;
		wHelpSize = sizeof(szDescrRunConsoleW);

		aVerb = szVerbRunConsoleA;
		aVerbSize = sizeof(szVerbRunConsoleA);

		wVerb = szVerbRunConsoleW;
		wVerbSize = sizeof(szVerbRunConsoleW);
	}
	else if (idCmd == m_idCmdFirst + eMC_PostConsole) {
		aHelp = szDescrPostConsoleA;
		aHelpSize = sizeof(szDescrPostConsoleA);

		wHelp = szDescrPostConsoleW;
		wHelpSize = sizeof(szDescrPostConsoleW);

		aVerb = szVerbPostConsoleA;
		aVerbSize = sizeof(szVerbPostConsoleA);

		wVerb = szVerbPostConsoleW;
		wVerbSize = sizeof(szVerbPostConsoleW);
	}
	if (idCmd == m_idCmdFirst + eMC_RunConsoleWithTabFake) {
		aHelp = szDescrRunConsoleWithTabA;
		aHelpSize = sizeof(szDescrRunConsoleWithTabA);

		wHelp = szDescrRunConsoleWithTabW;
		wHelpSize = sizeof(szDescrRunConsoleWithTabW);

		aVerb = szVerbRunConsoleWithTabA;
		aVerbSize = sizeof(szVerbRunConsoleWithTabA);

		wVerb = szVerbRunConsoleW;
		wVerbSize = sizeof(szVerbRunConsoleWithTabW);
	}
	if (idCmd == m_idCmdFirst + eMC_PostConsoleWithTabFake) {
		aHelp = szDescrPostConsoleWithTabA;
		aHelpSize = sizeof(szDescrPostConsoleWithTabA);

		wHelp = szDescrPostConsoleWithTabW;
		wHelpSize = sizeof(szDescrPostConsoleWithTabW);

		aVerb = szVerbPostConsoleWithTabA;
		aVerbSize = sizeof(szVerbPostConsoleWithTabA);

		wVerb = szVerbPostConsoleWithTabW;
		wVerbSize = sizeof(szVerbPostConsoleWithTabW);
	}
	else {
	}

	switch(uType) {
	case GCS_HELPTEXTA:
		hr = StringCbCopyNA(pszName, cchMax, aHelp, aHelpSize);
		break; 

	case GCS_HELPTEXTW:
		hr = StringCbCopyNW((LPWSTR)pszName, cchMax * sizeof(wchar_t), wHelp, wHelpSize);
		break; 

	case GCS_VERBA:
		hr = StringCbCopyNA(pszName, cchMax, aVerb, aVerbSize);
		break; 

	case GCS_VERBW:
		hr = StringCbCopyNW((LPWSTR)pszName, cchMax * sizeof(wchar_t), wVerb, wVerbSize);
		break; 

	default:
		hr = S_OK;
		break; 
	}
	return hr;
}
Exemple #3
0
HRESULT StringCbCopyA(
        LPSTR pszDest,
        size_t cbDest,
        LPCSTR pszSrc){
    return StringCbCopyNA(pszDest, cbDest, pszSrc, cbDest);
}