【环境变量】普通情况环境变量&SYSTEM权限下获取User权限的环境变量

本文介绍了如何在Windows系统中获取环境变量,特别是 `%temp%` 和在 `SYSTEM` 权限下获取 `User` 权限环境变量的方法。涉及API如 `SHGetSpecialFolderPath`、`GetTempPath`、`GetEnvironmentVariable`,并指出在 `SYSTEM` 权限下,这些API返回的结果与 `User` 权限不同。解决办法包括使用 `WTSQueryUserToken` 降权获取用户Token,以及处理注册表和进程权限的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取环境变量的常用API
  1. SHGetSpecialFolderPath
BOOL SHGetSpecialFolderPathA(
  HWND  hwnd,			//保留
  LPSTR pszPath,		//指向以null结尾的字符串的指针,该字符串接收指定文件夹的驱动器和路径。此缓冲区的大小必须至少为MAX_PATH个字符。
  int   csidl,			//一个CSIDL值,用于标识要检索其路径的文件夹。
  BOOL  fCreate			//指示是否应创建文件夹(如果该文件夹尚不存在)。如果此值非零,则创建该文件夹。如果此值为零,则不会创建该文件夹。
);
  1. SHGetFolderPath
SHFOLDERAPI SHGetFolderPathA(
  HWND   hwnd,			//保留
  int    csidl,			//一个CSIDL值,用于标识要检索其路径的文件夹。
  HANDLE hToken,		//访问令牌
  DWORD  dwFlags,		//指定要返回的路径的标志。
  LPSTR  pszPath		//一个指向null -terminated字符串的指针,长度为MAX_PATH,它将接收路径。如果发生错误或返回S_FALSE,则此字符串将为空。返回的路径不包括尾部反斜杠。例如,返回“C:\ Users”而不是“C:\ Users”。
);
  • 关于csidl:
    关于该项,可以在ShlObj.h文件中查看具体值定义。(比如:CSIDL_PROGRAM_FILES)
    需要注意的一点:%temp%目录无法通过该API直接获取。
  1. GetTempPath
//返回值:如果函数成功,则返回值是复制到lpBuffer的字符串的长度,以TCHAR表示,不包括终止空字符。如果返回值大于nBufferLength,则返回值是保存路径所
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值