0

簡単なコードがあります:

[DllImport("winspool.Drv", EntryPoint = "AddMonitorA", SetLastError = true, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
        private static extern bool AddMonitor([MarshalAs(UnmanagedType.LPStr)] string Name, Int32 Level, [In, MarshalAs(UnmanagedType.LPStruct)] MONITOR_INFO_2 mi2);

public static int MonitorInstaller(out string errorMessage)
    {
        int ret = 0;
        byte* pMonitor = GetBytePtr(Globals.PortMonitorName);
        errorMessage = null;

        ret = IsMonitorInstalled(pMonitor, false);
        Loger.WriteLog("IsMonitorInstaled: {0}", ret);
        if (ret != 0)
        {
            Loger.WriteLog("Test_point_01");
            errorMessage = "Monitor is already installed.";
            return 1;
        }

        bool delRes = DeleteMonitor(null, null, Globals.PortMonitorName);
        Loger.WriteLog("Delete result: {0}", delRes);


        MONITOR_INFO_2 mi2 = new MONITOR_INFO_2();

        mi2.pName = Globals.PortMonitorName;
        mi2.pEnvironment = "Windows NT x86";
        mi2.pDLLName = Globals.MonitorFile;

        Loger.WriteLog("mi2 data:");
        Loger.WriteLog("pName: {0}", mi2.pName);
        Loger.WriteLog("pDLLName: {0}", mi2.pDLLName);

        bool bRet = AddMonitor(null, 2, mi2);
        Loger.WriteLog("AddMonitor result: {0}", bRet);
        if (!bRet)
        {
            int errorCode = Marshal.GetLastWin32Error();
            Loger.WriteLog("AddMonitor erro: {0}", errorCode);
            errorMessage = new Win32Exception(errorCode).Message;
            return errorCode;
        }

        return 0;
    }

AddMonitor 関数は常に 183 エラーコードを設定します: そのファイルが既に存在する場合、ファイルを作成できません。しかし、そのようなモニターはありません。アイデアがあれば教えてください。管理者アカウントで実行されている PS アプリケーション。テスト仮想マシンにはウイルス対策がなく、Windows ファイアウォールはオフになっています。

4

0 に答える 0