好的,所以这是基于:.net 中 CreateJobObject/SetInformationJobObject pinvoke 的工作示例?
我创建了一个作业对象并将其附加到 MS Word 的一个实例。作业对象具有 UI 限制 WriteClipboard。我的假设是,这应该可以防止人们从文档中复制。但是他们仍然可以粘贴进去。然而,只有这个限制,我不能同时做这两件事。
我知道作业对象已被应用,因为它在 AssignProcessToJobObject 完成后正确显示在流程资源管理器的选项卡中。
如果我指定了 LIMIT Read & Write 剪贴板 ui 限制,我会认为这是行为。
这是上面链接中的构造函数 - 我添加了 UIRestriction - Write Clipbard
public Job(string jobName)
{
handle = CreateJobObject(IntPtr.Zero, jobName);
var info = new JOBOBJECT_BASIC_LIMIT_INFORMATION
{
LimitFlags = 0x2000
};
var extendedInfo = new JOBOBJECT_EXTENDED_LIMIT_INFORMATION
{
BasicLimitInformation = info
};
int length = Marshal.SizeOf(typeof(JOBOBJECT_EXTENDED_LIMIT_INFORMATION));
IntPtr extendedInfoPtr = Marshal.AllocHGlobal(length);
Marshal.StructureToPtr(extendedInfo, extendedInfoPtr, false);
if (!SetInformationJobObject(handle, JobObjectInfoType.ExtendedLimitInformation, extendedInfoPtr, (uint)length))
throw new Exception(string.Format("Unable to set information. Error: {0}", Marshal.GetLastWin32Error()));
///UIRestrictions
var uiRestrictions = new JOBOBJECT_BASIC_UI_RESTRICTIONS
{
UIRestrictionsClass = 0x00000004 //No write to clipboard
};
length = Marshal.SizeOf(typeof(JOBOBJECT_BASIC_UI_RESTRICTIONS));
IntPtr basicUIInfoPtr = Marshal.AllocHGlobal(length);
Marshal.StructureToPtr(uiRestrictions, basicUIInfoPtr, false);
if (!SetInformationJobObject(handle, JobObjectInfoType.BasicUIRestrictions, basicUIInfoPtr, (uint)length))
throw new Exception(string.Format("Unable to set information. Error: {0}", Marshal.GetLastWin32Error()));
}
然后在主程序中我执行以下操作:
Job j = new Job("NewJob");
j.AddProcess(ProcID);
其中 ProcID 是我要添加作业的进程的 ID。在尝试添加之前,我会检查进程是否已经有工作。除此之外,我没有收到任何异常错误,正如我所说的 SysInternalstool,流程资源管理器将新工作附加到流程中。
有什么想法吗?