作业对象 - 限制写入剪贴板可防止粘贴到主机进程并从主进程复制

时间:2012-07-21 00:24:58

标签: c#

好的,所以这是基于:Working example of CreateJobObject/SetInformationJobObject pinvoke in .net?

我创建了一个作业对象并将其附加到MS Word实例。作业对象具有UI限制WriteClipboard。我的假设是,这应该阻止人们从文档中复制。但他们仍然可以粘贴到它。但是,只有这个限制我才能做到这两点。

我知道在AssignProcessToJobObject完成后,在Process explorer的选项卡中正确显示了Job Object已被应用。

如果我指定了LIMIT Read & 写剪贴板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,进程资源管理器将新工作附加到该过程。

有任何想法吗?

0 个答案:

没有答案