0

OK、これは以下に基づいています: CreateJobObject/SetInformationJobObject pinvoke in .net?

ジョブ オブジェクトを作成し、MS Word のインスタンスに添付しました。ジョブ オブジェクトには、UI 制限 WriteClipboard があります。私の推測では、これにより、人々がドキュメントからコピーするのを防ぐことができます。しかし、彼らはまだそれに貼り付けることができました。ただし、この制限だけでは、両方を行うことはできません。

AssignProcessToJobObject が完了すると、ジョブ オブジェクトがプロセス エクスプローラーのタブに正しく表示されるので、ジョブ オブジェクトが適用されていることがわかります。

LIMIT Read & Write クリップボード UI 制限を指定した場合、これが動作であると考えたでしょう。

上記のリンクからのコンストラクターは次のとおりです-UIRestrictionを追加しました-クリップバードの書き込み

     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