.NET:如何 PInvoke UpdateProcThreadAttribute
我尝试在 Windows 7 上使用 PInvoke UpdateProcThreadAttribute()
,但我的尝试只是不断返回 FALSE,最后一个 Win32 错误为 50。
Function declaration (from MSDN)
BOOL WINAPI UpdateProcThreadAttribute(
__inout LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
__in DWORD dwFlags,
__in DWORD_PTR Attribute,
__in PVOID lpValue,
__in SIZE_T cbSize,
__out_opt PVOID lpPreviousValue,
__in_opt PSIZE_T lpReturnSize
);
这是我对 PInvoke 签名的尝试:
[DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi, SetLastError = true)]
public static extern bool UpdateProcThreadAttribute
(
IntPtr lpAttributeList,
UInt32 dwFlags,
ref UInt32 Attribute,
ref IntPtr lpValue,
ref IntPtr cbSize,
IntPtr lpPreviousValue,
IntPtr lpReturnSize
);
此声明是否合理?谢谢。
I am trying to PInvoke UpdateProcThreadAttribute()
on Windows 7 but my attempts just keep returning FALSE with a Last Win32 Error of 50.
Function declaration (from MSDN)
BOOL WINAPI UpdateProcThreadAttribute(
__inout LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList,
__in DWORD dwFlags,
__in DWORD_PTR Attribute,
__in PVOID lpValue,
__in SIZE_T cbSize,
__out_opt PVOID lpPreviousValue,
__in_opt PSIZE_T lpReturnSize
);
Here is my attempt at the PInvoke signature:
[DllImport("kernel32.dll", CallingConvention = CallingConvention.Winapi, SetLastError = true)]
public static extern bool UpdateProcThreadAttribute
(
IntPtr lpAttributeList,
UInt32 dwFlags,
ref UInt32 Attribute,
ref IntPtr lpValue,
ref IntPtr cbSize,
IntPtr lpPreviousValue,
IntPtr lpReturnSize
);
Is this declaration sensible? Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的声明存在一些问题,但给您带来不支持错误的问题是 Attribute 参数。 DWORD_PTR 不是指针,而是指针大小的无符号整数,因此它应该是 IntPtr,而不是 ref uint。
我将使用的声明是:
编辑:
我尝试将其作为注释来执行,但不需要很好地编码。
对于进程句柄,您需要一个 IntPtr 来保存句柄。所以你需要类似的东西:
You have a few problems with your declaration but the one that is giving you the not supported error is the Attribute parameter. A DWORD_PTR is not a pointer but rather a pointer sized unsigned integer so rather than ref uint it should be an IntPtr.
The declaration I would use is:
EDIT:
I tried to do this as a comment but it doesn't take to code very well.
For a process handle you need an IntPtr to hold the handle. So you would need something like: