首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON?的十六进制值是多少

PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON?的十六进制值是多少
EN

Stack Overflow用户
提问于 2021-04-27 22:48:10
回答 1查看 119关注 0票数 0

我想在C#程序中使用UpdateProcThreadAttribute()接口调用,但是我找不到PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON的十六进制值。根据PInvoke.net的说法,我只能在Microsoft's website上找到(0x00000001ui64 << 44),但我不知道如何将其实现到我的代码中,并将其用作IntPtr

EN

回答 1

Stack Overflow用户

发布于 2021-04-28 02:54:15

在C/C++中,0x00000001ui64是一个值为1的无符号64位整数,<< 44将该值左移44位。左移相当于乘以2,因此将12相乘44的结果是17592186044416,在十六进制中是0x100000000000UL,或者是0x1000_0000_0000UL,表示可靠性。

仅供参考,C#具有C/C++所具有的same bit-shift operators

LPPROC_THREAD_ATTRIBUTE_LIST是指向PROC_THREAD_ATTRIBUTE_LIST结构的指针。调用InitializeProcThreadAttributeList() 1次以确定该列表需要多大,然后分配该大小的内存,并再次调用InitializeProcThreadAttributeList()初始化该列表。

例如(另请参阅.NET : How to PInvoke UpdateProcThreadAttribute):

代码语言:javascript
复制
const int PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY = 0x20007;
const long PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON = 0x100000000000L;

[DllImport("kernel32.dll", SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool InitializeProcThreadAttributeList(
     IntPtr lpAttributeList,
     int dwAttributeCount,
     int dwFlags,
     ref IntPtr lpSize);

[DllImport("kernel32.dll", SetLastError=true)]
public static extern bool DeleteProcThreadAttributeList(IntPtr lpAttributeList);

[DllImport("kernel32.dll", SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool UpdateProcThreadAttribute(
     IntPtr lpAttributeList,
     uint dwFlags,
     IntPtr Attribute,
     IntPtr lpValue,
     IntPtr cbSize,
     IntPtr lpPreviousValue,
     IntPtr lpReturnSize);

...

IntPtr attrListSize = 0;
InitializeProcThreadAttributeList(
    IntPtr.Zero,
    1,
    0,
    ref attrListSize);

IntPtr attrList = Marshal.AllocHGlobal(attrListSize);
InitializeProcThreadAttributeList(
    attrList,
    1,
    0,
    ref attrListSize);

IntPtr lpValue = Marshal.AllocHGlobal(sizeof(long));
Marshal.WriteInt64(lpValue, PROCESS_CREATION_MITIGATION_POLICY_BLOCK_NON_MICROSOFT_BINARIES_ALWAYS_ON);

UpdateProcThreadAttribute(
    attrList,
    0,
    (IntPtr)PROC_THREAD_ATTRIBUTE_MITIGATION_POLICY,
    lpValue,
    sizeof(long),
    IntPtr.Zero,
    IntPtr.Zero
);

// use attrList as needed, ie in STARTUPINFOEX.lpAttributeList ...

DeleteProcThreadAttributeList(attrList);

Marshal.FreeHGlobal(lpValue);
Marshal.FreeHGlobal(attrList);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67285410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档