windows-System权限获取任意用户权限目录-举例GetTempPath

摘要:
OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,&hToken))返回FALSE;CloseHandle(hProcessSnap);中断;}}而(Process32Next(hProcessSnap,&pe32));WCHARszEnvsPath[MAX_PATH]={0};如果(!
目录

一丶简介

在System权限启动我们的程序之后.如果程序内部使用了GetTempPath()函数.或者使用了其它跟用户权限有关的函数.则获取的路径不是你想要的.
比如 你在System权限下使用了GetTempPath() 那么获取的temp路径有可能就是 "C:WindowsTemp" 而我们想要获取的路径则是 "C:userxxxAppdatalocal emp"
这里贴出代码. 原理就是 使用用户权限的Token 配合函数ExpandEnvironmentStringsForUserW 函数来获取.

二丶代码

#include <TlHelp32.h>
#include <userenv.h>
#pragma comment(lib, "Userenv.lib")

BOOL ExpandSysEnvsByName(const WCHAR* envsName, std::wstring& envsPath)
{
    HANDLE hToken = nullptr;
    HANDLE hProcessSnap = nullptr;
    PROCESSENTRY32 pe32 = { 0 };
    pe32.dwSize = sizeof(PROCESSENTRY32);

    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (INVALID_HANDLE_VALUE == hProcessSnap)
        return FALSE;
    if (!Process32First(hProcessSnap, &pe32))
        return FALSE;
    do
    {
        if (_wcsicmp(pe32.szExeFile, L"explorer.exe") == 0)
        {
            HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe32.th32ProcessID);
            if (NULL == hProcess)
                return FALSE;
            if (!OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, &hToken))
                return FALSE;
            CloseHandle(hProcessSnap);
            break;
        }
    } while (Process32Next(hProcessSnap, &pe32));

    WCHAR szEnvsPath[MAX_PATH] = { 0 };
    if (!ExpandEnvironmentStringsForUserW(hToken, envsName, szEnvsPath, MAX_PATH))
        return FALSE;

    envsPath = szEnvsPath;
    return TRUE;
}
int main()
{

    wstring Ret;
    ExpandSysEnvsByName(TEXT("%Appdata%"), Ret);
}

上方代码以appdata举例 %%这种环境变量大家可以多搜一下. 这里不整理了.
使用函数获取来的路径如下:
Ret = "C:UsersibinaryAppDataRoaming""
通过你自己的拼接路径就可以拼接处Temp路径了.
也可以直接输入%temp%来获取.

免责声明:文章转载自《windows-System权限获取任意用户权限目录-举例GetTempPath》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇sqlite乱码的解决方法DevExpress GridView 鼠标悬停颜色追踪(行或单元格)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

安卓系统中各镜像介绍

背景 对于安卓开发而言,了解各镜像的意义、内容以及如何制作,有极大的意义。 注意,ROM中的5个镜像文件的扩展名都是img,但其格式却不同,也就是说不能使用同一种方法对其进行格式解析。 系统镜像(System.img) 系统镜像用于存储Android系统的核心文件,将其解压出来,就是设备中/system目录,里面包含了Android系统主要的目录和文件。一...

JAVA代码时间SFTP文件的下载

参考文章:http://blog.csdn.net/smallerpig/article/details/50976191 SFTP文件的下载与FTP文件的下载差别较大,需要下载jsch-0.1.54jar包 package com.cd.util; import com.jcraft.jsch.JSchException;...

C#实现JSON序列化与反序列化

JSON(JavaScript Object Notation)——JavaScript对象表示法,是JavaScript用来处理数据的一种格式,大部分是用来处理JavaScript和web服务器端之间的数据交换,把后台web服务器的数据传递到前台,然后使用JavaScript进行处理,例如ajax等,是独立于语言和平台的轻量级的数据交换格式。 JSO...

C# winform 多线程中创建等待窗体

1.首先创建一个WinForm窗体,可讲窗体的FormBorderStyle属性设置为"None",将窗体的标题栏去掉。窗体中可放一个PictureBox控件和两个Label控件。其中PictureBox控件存放加载等待的图片。一个Label控件可放置Text文本。 WinForm代码如下: using System; using System.Colle...

Unity3D:粒子系统Particle System

1. GameObject → Create Other  →  Particle System。 2. 选中 Particle System,可看到下列屬性:                           3.Particle System:                           Duration: 粒子发射时间(设定为5秒。每...

LOB类型的学习、总结

LOB相关的概念 LOB类型: 将信息文件(十进制、二进制)、图像甚至音频信息采用数据库作为保存载体时,就需要使用lob类型数据。 有两种Lob,Internal Lob和External Lob。Internal Lob是指Lob数据存储在Oracle数据文件里,External Lob是指Lob数据存储在数据库外部的操作系统中。 CLOB:  ...