簡単なコードがあります:
[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 ファイアウォールはオフになっています。