Exemplo n.º 1
0
bool UninstallToolRecord( bool adjust_uac )
{
	TCHAR path_dst[MAX_PATH * 2];
	if (!GetProductBinDir(path_dst, ARRAYSIZE(path_dst)))
	{
		return false;
	}

	::PathAppend(path_dst, TEXT("toolRecord.dll"));
	if (INVALID_FILE_ATTRIBUTES == ::GetFileAttributes(path_dst))
	{
		return true;
	}

	if (!RemoveFile(path_dst))
	{
		if (adjust_uac)
		{
			if (!IsRunAsAdmin())
			{
				TCHAR path_exe[MAX_PATH * 2];
				::GetModuleFileName(NULL, path_exe, ARRAYSIZE(path_exe));
				LaunchUacApp(path_exe, TEXT("unst_tool_record"), true);
			}
		}
	}

	DWORD file_attr = GetFileAttributes(path_dst);
	return INVALID_FILE_ATTRIBUTES == file_attr;
}
Exemplo n.º 2
0
bool InstallToolRecord( bool adjust_uac )
{
	TCHAR path_dst[MAX_PATH * 2];
	if (!GetProductBinDir(path_dst, ARRAYSIZE(path_dst)))
	{
		SetToolErrorMsg(TEXT("无法定位Zoom安装目录!"));
		return false;
	}
	else
	{
		::PathAppend(path_dst, TOOLRECORD_DLL_NAME);
	}

	HMODULE res_module = GetModuleHandle(NULL);
	if (!ExtractResource(res_module, IDR_DLL_RECORD, TEXT("DLL"), ExtractResourceCallback_SaveToFile, path_dst))
	{
		SetToolErrorMsg(TEXT("解压") TOOLRECORD_DLL_NAME TEXT("文件失败!"));

		if (adjust_uac)
		{
			if (!IsRunAsAdmin())
			{
				TCHAR path_exe[MAX_PATH * 2];
				::GetModuleFileName(NULL, path_exe, ARRAYSIZE(path_exe));
				LaunchUacApp(path_exe, TEXT("inst_tool_record"), true);				
			}
		}
	}

	DWORD file_attr = GetFileAttributes(path_dst);
	return INVALID_FILE_ATTRIBUTES != file_attr;
}
Exemplo n.º 3
0
//
//   函数:OnCommand(HWND, int, HWND, UINT)
//
//   用途:处理WM_COMMAND消息
//
void OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch (id)
    {
    case IDC_ELEVATE_BN:
        {
            // 检查当前进程是否以管理员权限运行,如果不是则提升。           
            BOOL fIsRunAsAdmin;
            try
            {
                fIsRunAsAdmin = IsRunAsAdmin();
            }
            catch (DWORD dwError)
            {
                ReportError(L"IsRunAsAdmin", dwError);
                break;
            }

             // 如果此进程不是以管理员身份运行,提升权限等级。
            if (!fIsRunAsAdmin)
            {
                wchar_t szPath[MAX_PATH];
                if (GetModuleFileName(NULL, szPath, ARRAYSIZE(szPath)))
                {
                    // 以管理员身份启动本程序。
                    SHELLEXECUTEINFO sei = { sizeof(sei) };
                    sei.lpVerb = L"runas";
                    sei.lpFile = szPath;
                    sei.hwnd = hWnd;
                    sei.nShow = SW_NORMAL;

                    if (!ShellExecuteEx(&sei))
                    {
                        DWORD dwError = GetLastError();
                        if (dwError == ERROR_CANCELLED)
                        {
                                // 用户拒绝提升
                                // 什么都不做...
                        }
                    }
                    else
                    {
                        EndDialog(hWnd, TRUE);  // 退出
                    }
                }
            }
            else
            {
                MessageBox(hWnd, L"此进程已以管理员身份运行", L"UAC", MB_OK);
            }
        }
        break;

    case IDOK:
    case IDCANCEL:
        EndDialog(hWnd, 0);
        break;
    }
}
Exemplo n.º 4
0
int main(int argc, char* argv[]) {
    LOG("Is Run As Admin: %d", IsRunAsAdmin());
    LOG("Is Elevated: %d", IsElevated());
    init(argc, argv);
    startup();
    cleanup();
    return 0;
}
Exemplo n.º 5
0
BOOL OnInitDialog(HWND hWnd, HWND hwndFocus, LPARAM lParam)
{
    // 获取并显示即使在还没有为当前用户提升权限的前提下,拥有此进程的主访
    // 问令牌的用户是否是本地管理员组的成员。(IsUserInAdminGroup)。
    HWND hInAdminGroupLabel = GetDlgItem(hWnd, IDC_INADMINGROUP_STATIC);
    try
    {
        BOOL const fInAdminGroup = IsUserInAdminGroup();
        SetWindowText(hInAdminGroupLabel, fInAdminGroup ? L"是" : L"否");
    }
    catch (DWORD dwError)
    {
        SetWindowText(hInAdminGroupLabel, L"N/A");
        ReportError(L"IsUserInAdminGroup", dwError);
    }

     // 获取并显示是否此进程以管理员身份运行。(IsRunAsAdmin)。
    HWND hIsRunAsAdminLabel = GetDlgItem(hWnd, IDC_ISRUNASADMIN_STATIC);
    try
    {
        BOOL const fIsRunAsAdmin = IsRunAsAdmin();
        SetWindowText(hIsRunAsAdminLabel, fIsRunAsAdmin ? L"是" : L"否");
    }
    catch (DWORD dwError)
    {
        SetWindowText(hIsRunAsAdminLabel, L"N/A");
        ReportError(L"IsRunAsAdmin", dwError);
    }
    

     // 获取并显示进程权限提升信息(IsProcessElevated)和完整性级别(GetProcessIntegrityLevel)
    // 注意:这些信息在Windows Vista之前的Windows中不存在。

    HWND hIsElevatedLabel = GetDlgItem(hWnd, IDC_ISELEVATED_STATIC);
    HWND hILLabel = GetDlgItem(hWnd, IDC_IL_STATIC);

    OSVERSIONINFO osver = { sizeof(osver) };
    if (GetVersionEx(&osver) && osver.dwMajorVersion >= 6)
    {
        // 运行于Windows Vista或后续版本(主版本号 >= 6)。
        try
        {
            // 获取并显示进程权限提升信息
            BOOL const fIsElevated = IsProcessElevated();
            SetWindowText(hIsElevatedLabel, fIsElevated ? L"是" : L"否");

            // 如果进程尚未被提升,更新“自我提升权限”按钮以在UI中显示UAC盾形
            // 图标。宏Button_SetElevationRequiredState(在Commctrl.h中定义)用
            // 于显示或隐藏按钮上的盾形图标。你也可以通过调用SHGetStockIconInfo
            // (参量SIID_SHIELD)来获取此图标。
            HWND hElevateBtn = GetDlgItem(hWnd, IDC_ELEVATE_BN);
            Button_SetElevationRequiredState(hElevateBtn, !fIsElevated);
        }
        catch (DWORD dwError)
        {
            SetWindowText(hIsElevatedLabel, L"N/A");
            ReportError(L"IsProcessElevated", dwError);
        }

        try
        {
            // 获取并显示进程的完整性级别
            DWORD const dwIntegrityLevel = GetProcessIntegrityLevel();
            switch (dwIntegrityLevel)
            {
            case SECURITY_MANDATORY_UNTRUSTED_RID: SetWindowText(hILLabel, L"不信任"); break;
            case SECURITY_MANDATORY_LOW_RID: SetWindowText(hILLabel, L"低"); break;
            case SECURITY_MANDATORY_MEDIUM_RID: SetWindowText(hILLabel, L"中"); break;
            case SECURITY_MANDATORY_HIGH_RID: SetWindowText(hILLabel, L"高"); break;
            case SECURITY_MANDATORY_SYSTEM_RID: SetWindowText(hILLabel, L"系统"); break;
            default: SetWindowText(hILLabel, L"未知"); break;
            }
        }
        catch (DWORD dwError)
        {
            SetWindowText(hILLabel, L"N/A");
            ReportError(L"GetProcessIntegrityLevel", dwError);
        }
    }
    else
    {
        SetWindowText(hIsElevatedLabel, L"N/A");
        SetWindowText(hILLabel, L"N/A");
    }

    return TRUE;
}