小编And*_*ers的帖子

如何在c ++中连接两个LPCWSTR

我正在尝试使用MoveFile(LPCWSTR existing,LPCWSTR new)函数.我希望能够通过连接不同的数据(例如:根目录和潜在的文件名)来实现其中一个目录(由LPCWSTR表示).尽管经过了数小时的研究,我还是想不出怎么做.感谢任何帮助.

c++ windows winapi concatenation

7
推荐指数
1
解决办法
2750
查看次数

卷到物理驱动器

QueryDosDevice(L"E:", DeviceName, MAX_PATH);
Run Code Online (Sandbox Code Playgroud)

(E:是SD卡)

DeviceName是"\ Device\HarddiskVolume3"

如何将其"转换"为类似的东西 "\\.\PHYSICALDRIVE1"

c c++ windows winapi hard-drive

6
推荐指数
1
解决办法
4582
查看次数

是否可以哄std :: atomic <T>输出CMPXCHG16B

是否有可能哄骗std :: atomic输出CMPXCHG16B用于我对在Windows x64上使用原子互锁操作不感兴趣的类型,或者我只需要吸收它并手动执行原子操作?我可以让GCC/Clang在Linux上这样做,所以我怀疑它只是微软标准库的一个问题.

struct Byte16
{
    int64_t a, b;
};

std::atomic<Byte16> atm;
Byte16 a = { 1, 2 };
atm.compare_exchange_strong(...); // This has a lock on Windows, not on Linux version of code
Run Code Online (Sandbox Code Playgroud)

c++ windows icc visual-studio c++11

6
推荐指数
1
解决办法
467
查看次数

如何以低完整性进程运行时,如何获取%temp%\ Low的位置

当进程以低完整性级别运行时,您无法写入%temp%,因此我需要一种方法来查找%temp%\ Low目录的路径(不使用"低"字硬编码)

windows uac windows-vista windows-7

5
推荐指数
2
解决办法
2257
查看次数

程序和功能中的 NSIS MUI 图标

我想在 Windows 程序和功能中显示我的自定义图标。我已经通过 NSIS 创建了一个安装程序脚本 下面是我的 MUI 用户界面设置

; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON ".\Include\Images\Icons\icon.ico"
!define MUI_UNICON ".\Include\Images\Icons\icon.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP ".\Include\Images\Header\header.bmp"
!define MUI_HEADERIMAGE_UNBITMAP ".\Include\Images\Header\header.bmp" 
!define MUI_HEADERIMAGE_RIGHT
!define MUI_WELCOMEFINISHPAGE_BITMAP ".\Include\Images\Wizard\welcome.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP ".\Include\Images\Wizard\welcome.bmp"
Run Code Online (Sandbox Code Playgroud)

nsis

5
推荐指数
1
解决办法
4555
查看次数

使用 CreateRestrictedToken(LUA_TOKEN) 从提升的进程创建低/中进程

我正在尝试从提升的进程创建中或低完整性进程。我知道还有其他类似的问题,但它们主要关注使用资源管理器或任务计划程序等解决方法,我想坚持使用CreateRestrictedToken()+ CreateProcessAsUser()

我认为一定可以以某种方式执行此操作,因为我相信 UAC 在您登录时会执行此操作,但我无法使令牌中的所有内容看起来像正常的 UAC Medium IL 令牌。

通过创建令牌CreateRestrictedToken(hThisProcessToken, LUA_TOKEN, ...),然后设置TokenOwnerTokenDefaultDacl然后TokenIntegrityLevel调用 之前,您可以获得 80% 的收益CreateProcessAsUser()

剩下的问题是TokenVirtualizationAllowedTokenVirtualizationEnabledTokenElevationTokenElevationTypeTokenMandatoryPolicy其中SetTokenInformation()失败并出现 ERROR_PRIVILEGE_NOT_HELD 或 ERROR_INVALID_PARAMETER。

如果我以 SYSTEM @ SECURITY_MANDATORY_SYSTEM_RID 身份运行并启用所有权限,而不是以管理员 @ SECURITY_MANDATORY_HIGH_RID 身份运行,那么我可以进行设置TokenMandatoryPolicyTokenVirtualization*但设置TokenElevation*仍然失败!(目前仅在 Windows 8 上进行了测试)

TokenElevation*令牌中没有正确的值是一个大问题,因为 Internet Explorer 无法在保护模式下启动,因为它认为令牌已提升。

的文档没有SetTokenInformation()说明TOKEN_INFORMATION_CLASS可以设置哪些项目以及需要哪些权限(如果有),我不明白为什么不允许您将这些设置为与实际完整性级别()匹配的较低安全TokenIntegrityLevel值令牌。

使用Safer API创建SAFER_LEVELID_NORMALUSER令牌并不能解决任何这些问题,而且还会创建比普通 …

windows security winapi uac windows-security

5
推荐指数
1
解决办法
1984
查看次数

/TSAWARE 链接器标志对 PE 可执行文件有什么作用?

将 /TSAWARE 链接器标志添加到我的一个项目 (Visual Studio 6) 后,我惊讶地发现 PE 文件 (.idata) 中有一个新部分。如果我不设置标志,导入将合并到 .rdata 中。

为了说明“问题”,我们从一个简单的控制台程序开始:

#include <stdio.h>
int main() 
{
    printf("hello world\n");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并编译: cl /Og /O1 /GF /WX /c main.c

然后链接

  • link /MACHINE:IX86 /SUBSYSTEM:CONSOLE /RELEASE /OUT:a.exe main.obj
  • link /MACHINE:IX86 /SUBSYSTEM:CONSOLE /RELEASE /OUT:b.exe /TSAWARE main.obj

让我们比较 dumpbin 输出:

Dump of file a.exe

File Type: EXECUTABLE IMAGE

  Summary

        4000 .data
        1000 .rdata
        5000 .text

Dump of file b.exe

File Type: EXECUTABLE IMAGE

  Summary

        4000 .data
        1000 .idata
        1000 .rdata
        5000 …
Run Code Online (Sandbox Code Playgroud)

windows linker visual-c++-6 portable-executable visual-c++

4
推荐指数
1
解决办法
4174
查看次数

4
推荐指数
1
解决办法
1386
查看次数

安装后运行应用程序(静默安装程序)

我想在安装后立即运行我的应用程序,我了解执行此操作的代码如下:

!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink"
!insertmacro MUI_PAGE_FINISH

Section
CreateShortcut "$DESKTOP\HelloWorldShortcut.lnk" "$INSTDIR\Hello World.exe" "dev03 3" 
SectionEnd    

Function LaunchLink
ExecShell "" "$DESKTOP\HelloWorldShortcut.lnk"
FunctionEnd
Run Code Online (Sandbox Code Playgroud)

问题是我的安装程序是静默安装程序,但上面的代码向其中添加了一个页面。

有没有办法使用静默安装程序在安装后立即运行应用程序?

nsis

4
推荐指数
1
解决办法
2263
查看次数

CreateProcessAsUser与ShellExecute

我需要ShellExecute作为另一个用户的东西,目前我开始使用CreateProcessAsUser该调用的辅助进程ShellExecute,但这似乎太多的黑客(错误的父进程等)有没有更好的方法来做到这一点?

@PabloG:ImpersonateLoggedOnUser不起作用:

HANDLE hTok;
VERIFY(LogonUser("otheruser",0,"password",LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,&hTok));
VERIFY(ImpersonateLoggedOnUser(hTok));
ShellExecute(0,0,"calc.exe",0,0,SW_SHOW);
RevertToSelf();
CloseHandle(hTok);

将以登录用户开始计算,而不是"其他用户"

@ 1800信息:CreateProcess/ 与Vista上的UAC CreateProcessAsUser不一样ShellExecute,CreateProcess当你无法控制用户正在执行的程序时,它是无用的(CreateProcess如果你给它一个带有标记为清单的清单的exe文件,则会返回错误requireAdmin)

@Brian R. Bondy:我已经知道这个信息(并且不要误解我的好东西),但这是关于主题(恕我直言)我要求的ShellExecuteAsUser,不是关于作为另一个用户启动进程,我已经知道了怎么做.

winapi windows-nt

3
推荐指数
1
解决办法
1万
查看次数

卸载程序不删除注册表

Function Check32or64BitWindows
${If} ${RunningX64}
      strcpy $INSTDIR "$PROGRAMFILES64\${APP_FULL_PATH}" 
      SetRegView 64

${Else}
       SetRegView 32
       strcpy $INSTDIR "$PROGRAMFILES32\${APP_FULL_PATH}"
${EndIf}
FunctionEnd
Run Code Online (Sandbox Code Playgroud)

如果检测到旧版本,则执行

ExecWait '"$INSTDIR\uninst.exe" /S' $0
Run Code Online (Sandbox Code Playgroud)

我的卸载部分:

Section uninstall
!define APP_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_VENDOR} ${APP_NAME}"
!define APP_UNINST_ROOT_KEY "HKLM"
DeleteRegKey ${APP_UNINST_ROOT_KEY} "${APP_UNINST_KEY}"
SectionEnd
Run Code Online (Sandbox Code Playgroud)

Section -Post
WriteRegStr ${APP_UNINST_ROOT_KEY} "${APP_UNINST_KEY}" "DisplayName" "${APP_FULL_NAME}"
SectionEnd
Run Code Online (Sandbox Code Playgroud)

Post部分在Windows 64位注册表视图中创建注册表项,但卸载程序不会删除注册表项.

如果我删除了对64位操作系统的检查,那么在Wow6432Node中创建和删除注册表就可以正常工作.

registry nsis uninstall

3
推荐指数
2
解决办法
3797
查看次数

SHGetFolderPath()32位对64位

如果我在具有CSIDL_PROGRAM_FILESx86文件夹ID而不是CSIDL_PROGRAM_FILES ID的32位系统中使用SHGetFolderPath api调用会发生什么?

理论上CSIDL_PROGRAM_FILESx86应映射到C:\program files (x86)64位系统,但它在32位系统中映射到什么路径不存在?

shell 64-bit winapi 32-bit path

1
推荐指数
1
解决办法
8982
查看次数

.:在classpath中有什么意义?

标题有这一切,在设置程序使用的类路径时,.:构造的意义是什么?

考虑

/Library/Java/Home/bin/java -cp $APP_HOME/lib/*.jar::  Handler
Run Code Online (Sandbox Code Playgroud)

VS

/Library/Java/Home/bin/java -cp .:$APP_HOME/lib/*.jar::  Handler
Run Code Online (Sandbox Code Playgroud)

java classpath

1
推荐指数
1
解决办法
698
查看次数