Exemplo n.º 1
0
//like A: is error path ,must be A:/
T_BOOL  Fwl_GetLongPath(T_U16 lPathName[], const T_U16 basePath[], const T_U16 rltPath[])
{
    T_U16 basePathLen= UStrLen(basePath);
    T_U16 endChar= basePath[basePathLen- 1];
    T_U16 pathSymbol= basePath[2];
    UStrCpy(lPathName, basePath); //A:/ A:/record the second char is the path symbol

    if(endChar != UNICODE_SOLIDUS && endChar != UNICODE_RES_SOLIDUS)
    {
        lPathName[basePathLen]= pathSymbol;
        lPathName[basePathLen+ 1]= '\0';
    }
    UStrCat(lPathName, rltPath);
    return AK_TRUE;
}
Exemplo n.º 2
0
HRESULT LINK(PTSTR ptzCmd)
{
	// Parse Shortcut,Target,Param,IconPath,IconIndex
	PTSTR ptzTarget = UStrChr(ptzCmd, CC_SEP);
	if (ptzTarget == NULL)
	{
		return ERROR_PATH_NOT_FOUND;
	}

	INT iIcon = 0;
	PTSTR ptzIcon = NULL;

	*ptzTarget++ = 0;
	PTSTR ptzParam = UStrChr(ptzTarget, CC_SEP);
	if (ptzParam)
	{
		*ptzParam++ = 0;
		ptzIcon = UStrChr(ptzParam, CC_SEP);
		if (ptzIcon)
		{
			*ptzIcon++ = 0;
			PTSTR ptzIndex = UStrChr(ptzIcon, CC_SEP);
			if (ptzIndex)
			{
				*ptzIndex++ = 0;
				iIcon = UStrToInt(ptzIndex);
			}
		}
	}

	// Search target
	if (*ptzCmd == '*')
	{
		ptzCmd++;
	}
	else
	{
		TCHAR tzTarget[MAX_PATH];
		if (SearchPath(NULL, ptzTarget, NULL, MAX_PATH, tzTarget, NULL))
		{
			ptzTarget = tzTarget;
		}
		else if (!UDirExist(ptzTarget))
		{
			return ERROR_PATH_NOT_FOUND;
		}
	}

	// Create shortcut
	IShellLink *pLink;
	CoInitialize(NULL);
	HRESULT hResult = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (PVOID *) &pLink);
	if (hResult == S_OK)
	{
		IPersistFile *pFile;
		hResult = pLink->QueryInterface(IID_IPersistFile, (PVOID *) &pFile);
		if (hResult == S_OK)
		{
			if (*ptzCmd == '!')
			{
				ptzCmd++;
				hResult = pLink->SetShowCmd(SW_SHOWMINIMIZED);
			}

			// Shortcut settings
			hResult = pLink->SetPath(ptzTarget);
			hResult = pLink->SetArguments(ptzParam);
			hResult = pLink->SetIconLocation(ptzIcon, iIcon);
			if (UPathSplit(ptzTarget) != ptzTarget)
			{
				hResult = pLink->SetWorkingDirectory(ptzTarget);
			}

			// Save link
			WCHAR wzLink[MAX_PATH];
			if (UStrCmpI(ptzCmd + UStrLen(ptzCmd) - 4, TEXT(".LNK")))
			{
				UStrCat(ptzCmd, TEXT(".LNK"));
			}
			UStrToWStr(wzLink, ptzCmd, MAX_PATH);
			UDirCreate(ptzCmd);
			hResult = pFile->Save(wzLink, FALSE);

			pFile->Release();
		}
		pLink->Release();
	}

	CoUninitialize();
	return hResult;
}
Exemplo n.º 3
0
HRESULT PAGE(PTSTR ptzCmd)
{
	// Parse size
	UINT uMin = 0;
	UINT uMax = 0;
	PTSTR p = UStrChr(ptzCmd, ' ');
	if (p)
	{
		*p++ = 0;
		uMin = UStrToInt(p);
		p = UStrChr(p, ' ');
		if (p)
		{
			*p++ = 0;
			uMax = UStrToInt(p);
		}
	}

	if (uMax<uMin)
	{
		uMax=uMin;
	}

	// Get DOS device name for page file
	TCHAR tzDrive[16];
	TCHAR tzDos[MAX_PATH];
	TCHAR tzFile[MAX_PATH];
	tzDrive[0] = ptzCmd[0]; tzDrive[1] = ptzCmd[1]; tzDrive[2] = 0;
	UStrCopy(tzFile, ptzCmd + 2);
	QueryDosDevice(tzDrive, tzDos, MAX_PATH);
	UStrCat(tzDos, tzFile);

	WCHAR wzPath[MAX_PATH];
	UStrToWStr(wzPath, tzDos, MAX_PATH);

	UNICODE_STRING sPath;
	sPath.Length = UWStrLen(wzPath) * sizeof(WCHAR);
	sPath.MaximumLength = sPath.Length + sizeof(WCHAR);
	sPath.Buffer = wzPath;

	// Fill size param
	ULARGE_INTEGER ulMax, ulMin;
	ulMin.QuadPart = uMin * 1024 * 1024;
	ulMax.QuadPart = uMax * 1024 * 1024;

	// Get function address
	typedef NTSTATUS (NTAPI* PNtCreatePagingFile)(PUNICODE_STRING sPath, PULARGE_INTEGER puInitSize, PULARGE_INTEGER puMaxSize, ULONG uPriority);
	PNtCreatePagingFile NtCreatePagingFile = (PNtCreatePagingFile) GetProcAddress(GetModuleHandle(TEXT("NTDLL")), "NtCreatePagingFile");
	if (!NtCreatePagingFile)
	{
		return E_FAIL;
	}

	// Create page file
	Priv(SE_CREATE_PAGEFILE_NAME);
	HRESULT hResult = NtCreatePagingFile(&sPath, &ulMin, &ulMax, 0);
	if (hResult == S_OK)
	{
		// Log to Windows Registry
		TCHAR tzStr[MAX_PATH];
		DWORD i = sizeof(tzStr);
		if (SHGetValue(HKEY_LOCAL_MACHINE, REG_MemMgr, REG_PageFile, NULL, tzStr, &i) != S_OK)
		{
			i = 0;
		}
		else
		{
			i = (i / sizeof(TCHAR)) - 1;
		}

		i += UStrPrint(tzStr + i, TEXT("%s %d %d"), ptzCmd, uMin, uMax);
		tzStr[++i] = 0;
		SHSetValue(HKEY_LOCAL_MACHINE, REG_MemMgr, REG_PageFile, REG_MULTI_SZ, tzStr, i * sizeof(TCHAR));
	}

	return hResult;
}
Exemplo n.º 4
0
//  ENVIronment
HRESULT ENVI(PTSTR ptzEnv, BOOL bSystem)
{
	TCHAR tzStr[MAX_STR];
	if (!ptzEnv[0] || (ptzEnv[0] == '='))
	{
		for (UINT i = 0; i < _NumOf(c_sMacro); i++)
		{
			if (ptzEnv[0]/* == '='*/)
			{
				ENVI((PTSTR) c_sMacro[i].ptzMacro, bSystem);
				continue;
			}

			PTSTR p = tzStr + UStrPrint(tzStr, TEXT("%s="), c_sMacro[i].ptzMacro);
			if (SHGetSpecialFolderPath(NULL, p, c_sMacro[i].iFolder, TRUE))
			{
				if (c_sMacro[i].iFolder == CSIDL_APPDATA)
				{
					// Trick
					UStrCat(p, TEXT("\\Microsoft\\Internet Explorer\\Quick Launch\\"));
					UDirCreate(p);
					CreateDirectory(p, NULL);
				}
				ENVI(tzStr, bSystem);
			}
		}

		if (ptzEnv[0]/* == '='*/)
		{
			return ENVI((PTSTR) STR_AppName, bSystem);
		}
		else
		{
			UStrPrint(tzStr, TEXT("%s=%s/%s"), STR_AppName, STR_VersionStamp, STR_BuildStamp);
			return ENVI(tzStr, bSystem);
		}
	}

	if (bSystem)
	{
		UStrPrint(tzStr, TEXT("HKLM\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment\\%s"), ptzEnv);
		REGX(tzStr);
	}

	PTSTR ptzValue = UStrChr(ptzEnv, '=');
	if (ptzValue)
	{
		// Trick : If no '=', ptzEnv can be a constant string.
		*ptzValue++ = 0;
	}
	HRESULT hResult = SetEnvironmentVariable(ptzEnv, ptzValue) ? S_OK : GetLastError();

	if (bSystem)
	{
		if (!ptzValue)
		{
			ptzValue = ptzEnv + UStrLen(ptzEnv) + 1;
		}
		DWORD dwResult = 0;
		SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) TEXT("Environment"), SMTO_ABORTIFHUNG, 5000, &dwResult);
	}
	return hResult;
}
Exemplo n.º 5
0
UINT CALLBACK DevCab(PVOID pvContext, UINT uMsg, UINT_PTR upParam1, UINT_PTR upParam2)
{
	static UINT s_uExtract = 0;

	if (uMsg == SPFILENOTIFY_FILEINCABINET)
	{
		PTSTR ptzTarget = ((FILE_IN_CABINET_INFO*) upParam1)->FullTargetName;
		PCTSTR ptzName = ((FILE_IN_CABINET_INFO*) upParam1)->NameInCabinet;

		PCTSTR p = UStrRChr(ptzName, '\\');
		if (p)
		{
			ptzName = p + 1;
		}

		// Extract INF or driver file
		p = ptzName + UStrLen(ptzName) - 4;
		if (UStrCmpI(p, TEXT(".INF")) == 0)
		{
			p = TEXT("%SystemRoot%\\INF\\");
		}
		else if (s_uExtract)
		{
			if (UStrCmpI(p, TEXT(".SYS")) == 0)
			{
				p = TEXT("%SystemRoot%\\SYSTEM32\\DRIVERS\\");
			}
			else if (UStrCmpI(p, TEXT(".DLL")) == 0)
			{
				p = TEXT("%SystemRoot%\\SYSTEM32\\");
			}
			else
			{
				p = TEXT("%SystemRoot%\\");
			}
		}
		else
		{
			// Skip
			return FILEOP_SKIP;
		}

		ExpandEnvironmentStrings(p, ptzTarget, MAX_PATH);
		UStrCat(ptzTarget, ptzName);
		UStrRep(ptzTarget, '#', '\\');
		UDirCreate(ptzTarget);
		return FILEOP_DOIT;
	}
	else if (uMsg == SPFILENOTIFY_FILEEXTRACTED)
	{
		PCTSTR ptzTarget = ((FILEPATHS*) upParam1)->Target;
		if (UStrCmpI(ptzTarget + UStrLen(ptzTarget) - 4, TEXT(".INF")))
		{
			// Not INF
			s_uExtract++;
			return NO_ERROR;
		}

		// Get Device from INF
		PCTSTR ptzDevID = DevGetInf((PCTSTR) pvContext, ptzTarget);
		if (ptzDevID)
		{
			// Found Driver
			s_uExtract = 1;
			do {*g_ptzDevInf++ = *ptzDevID;} while (*ptzDevID++);
			do {*g_ptzDevInf++ = *ptzTarget;} while (*ptzTarget++);
			return NO_ERROR;
		}

		// Delete INF
		if (s_uExtract != 1)
		{
			// Driver has been extracted completely.
			s_uExtract = 0;
			UFileDelete(ptzTarget);
		}
	}
	return NO_ERROR;
}