正如标题所示。比如说,我想通过Godbolt项目来做到这一点:
main.cpp
#include <iostream>
extern "C" int test_111();
int main()
{
int r = test_111();
std::cout << "result=" << r << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后在asm1.asm:
.code
test_111 PROC
; 64-bit assembly
xor eax, eax
inc rax
ret
test_111 ENDP
END
Run Code Online (Sandbox Code Playgroud)
在“x86-64 clang”(任何版本)下尝试。
但我似乎不知道如何做到这一点。有什么建议么?
附言。目标是将我自己的汇编指令注入到输出中。
编辑:
在评论中提出建议后,我尝试了关键词asm volatile,但它只是将我放入其中的任何乱码添加到程序集输出中:
我似乎无法找到一种方法来获得带有C++和WinAPI的工作站(计算机)的DN.任何想法如何做到这一点?
PS.工作站连接到域控制器.
PS2.我需要计算机的DN而不是登录用户.
c++ winapi active-directory domaincontroller distinguishedname
我正在尝试使用Visual Studio在C++中创建GUI应用程序的快捷方式.我正在使用IShellLink :: SetIconLocation方法创建带有图标索引的链接.但问题是,当我拥有的是来自.res文件的图标ID时,如何获得此索引?
#define IDR_ICON_CLEAR 130
Run Code Online (Sandbox Code Playgroud) 我有以下类实现必须使用单个全局数组的静态方法.它定义如下:
//Defined in LockTrack.h file
enum LOCK_ID{
LOCKID_0,
LOCKID_1,
LOCKID_2,
LOCKID_COUNT
};
static LOCK_ID __glob_lock_ids[LOCKID_COUNT];
class CLockTrack
{
public:
static void getLockedLocks(/*parameters*/)
{
//__glob_lock_ids = points to 0x015ef558 address in memory
LOCK_ID lockID = __glob_lock_ids[0];
}
static void inline setLock(LOCK_ID lockID)
{
//__glob_lock_ids = points to 0x015ef330 address in memory
__glob_lock_ids[lockID] = LOCK_ON_FLAG;
}
};
Run Code Online (Sandbox Code Playgroud)
但是会发生的是'__glob_lock_ids'指针指向每种方法中的不同内存位置.为什么?以及如何解决这个问题?
我对使用命令行参数调用CreateProcessAsUser的正确方法感到有些困惑.因此,如果没有详细说明填写其余参数,有人可以确认这是应该怎么做的吗?(换句话说,我应该将exe文件路径作为第一个命令行参数,还是将其指定为lpApplicationName足够的?)
LPCTSTR pExePath = L"c:\\program files\\sub dir\\program.exe";
LPCTSTR pCmdLine = L"v=\"one two\"";
TCHAR buff[MAX_PATH];
StringCchCopy(buff, MAX_PATH, _T("\""));
StringCbCat(buff, MAX_PATH, pExePath);
StringCbCat(buff, MAX_PATH, _T("\" "));
StringCbCat(buff, MAX_PATH, pCmdLine);
CreateProcessAsUser(hToken, pExePath, buff, NULL, NULL, FALSE, dwFlags, NULL, NULL, &si, &pi);
Run Code Online (Sandbox Code Playgroud) 我有一个Windows应用程序运行而不需要提升.我需要为应用程序的所有正在运行的实例之间共享的内存数组创建一个文件映射对象(请注意,其中一些实例可能在不同的登录会话中运行.)
我调用CreateFileMapping API来创建它,使用全局名称,即Global\sharedname使用安全描述符提供all访问权限,everyone但API失败,错误代码为5,或者ERROR_ACCESS_DENIED.
然后我开始阅读文档,发现我的进程需要SeCreateGlobalPrivilege特权.但是当我尝试分配该权限时,AdjustTokenPrivileges返回错误代码ERROR_NOT_ALL_ASSIGNED,我被卡住....
那么这里有什么诀窍,那个疯狂的MS怎么想让我们这样做?
PS.我之前可以使用相同的all access for everyone安全描述符和Global\sharedmutex名称创建一个全局命名的互斥锁(用于对共享内存的同步访问),而不会出现问题.
比方说,如果我有三个线程都通过互斥锁访问相同的互斥部分.
让我举个例子.
第一个线程探测互斥锁并首先获得其所有权:
//THREAD 1
//TIME: 2013-03-13 01:00:00.000Z
WaitForSingleObject(hMutex, INFINITE);
//Performs the operation that lasts 50 ms
ReleaseMutex(hMutex);
Run Code Online (Sandbox Code Playgroud)
然后10毫秒后,线程2也请求它:
//THREAD 2
//TIME: 2013-03-13 01:00:00.010Z
WaitForSingleObject(hMutex, INFINITE);
//Do work
ReleaseMutex(hMutex);
Run Code Online (Sandbox Code Playgroud)
20毫秒后,线程3也请求它:
//THREAD 3
//TIME: 2013-03-13 01:00:00.030Z
WaitForSingleObject(hMutex, INFINITE);
//Do work
ReleaseMutex(hMutex);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以确定线程2将始终在线程3之前获得互斥锁所有权(因为它可以说是"排在第一位"),或者它是否完全随意获得线程2和3之间的所有权?
如果它与互斥锁是任意的,如何确保第一个等待的线程首先获得所有权?
我一直在努力寻找获取当前安装在本地计算机上的数字证书信息的方法 - 任何可以获得X509Certificate2类集合的方法.
我能够找到这个问题,解释如何从.pfx文件中获取它.
知道如何为已安装的证书做到这一点吗?
我正在定义一个与PropertyGrid控件一起使用的自定义类.比如,其中一个属性定义如下:
[CategoryAttribute("Section Name"),
DefaultValueAttribute("Default value"),
DescriptionAttribute("My property description")]
public string MyPropertyName
{
get { return _MyPropertyName; }
set { _MyPropertyName = value; }
}
private string _MyPropertyName;
Run Code Online (Sandbox Code Playgroud)
如您所见,DefaultValueAttribute定义了属性的默认值.这种默认值用于两种情况:
如果此属性值从默认值更改,则
PropertyGrid控件将以粗体显示,并且
如果我调用ResetSelectedProperty方法PropertyGrid,它会将该默认值应用于所选单元格.
这个概念很好,除了一个限制DefaultValueAttribute.它只接受一个常量值.所以我很好奇,我可以动态地设置它,例如,从构造函数或稍后的代码中设置它吗?
编辑:我能够找到这个代码让我读到DefaultValueAttribute:
AttributeCollection attributes = TypeDescriptor.GetProperties(this)["MyPropertyName"].Attributes;
DefaultValueAttribute myAttribute = (DefaultValueAttribute)attributes[typeof(DefaultValueAttribute)];
string strDefaultValue = (string)myAttribute.Value;
Run Code Online (Sandbox Code Playgroud)
问题是,你如何设置它?
比如说,如果我有一个因HRESULT代码而失败的 WinAPI 。有没有办法将其转换为错误描述字符串?
c++ ×7
winapi ×6
windows ×3
.net ×2
c# ×2
assembly ×1
clang ×1
class ×1
code-signing ×1
file-mapping ×1
hresult ×1
icons ×1
mutex ×1
process ×1
propertygrid ×1
reflection ×1
winforms ×1