0

好的,所以这是基于:.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,流程资源管理器将新工作附加到流程中。

有什么想法吗?

4

0 回答 0