Articles of pinvoke

C#使用Pinvoke更改计算机的“描述”

如何使用Pinvoke更改本地计算机(Windows XP)的说明? 我已经find了直接更改registry的解决scheme,但老实说,不喜欢这样做。 我注意到在Win32_OperatingSystem中你可以得到描述,但我不知道我需要做什么来改变使用这个库的描述。 在我的其他Pinvoke示例中,总是有一个我必须使用的方法(有时包含pipe理对象)。 编辑:inheritance人我正在查看Pinvoke库http://msdn.microsoft.com/en-us/library/aa394239.aspx

在Linux 64位上通过值传递结构到P / Invoked库?

我试图得到我在Linux x86_64上编译的C#库的本机依赖关系。 代码本身是平台无关的并且易于编译。 但是,在第一次尝试在编译的依赖项上运行我的Linux项目之后,我开始从库中得到奇怪的结果,之后又发生了段错误。 经过一番调查,似乎P / Invoke函数的参数没有按照正确的顺序传递。 好像他们正在倒退。 我试着以几种不同的方式编译本地依赖,明确定义不同的调用约定。 似乎没有任何工作。 C#的extern方法定义 [DllImport(InteropUtil.PLATFORM_DLL)] public static extern NavStatus dtqFindPath(IntPtr query , NavmeshPoint startPosition , NavmeshPoint endPosition , IntPtr filter , [In, Out] uint[] resultPath , ref int pathCount , int maxPath); 相关的C ++定义 #if _MSC_VER // TRUE for Microsoft compiler. #define EXPORT_API __declspec(dllexport) // Required for VC++ […]

.NET PInvoke在Linux和Mac OS X平台上可用吗?

Windows上的.NET Framework中的平台调用。 [DllImport("user32.dll", CharSet=CharSet.Auto)] public static extern MessageBoxResult MessageBox(IntPtr hWnd, String text, String caption, int options); Linux和Mac OS X平台上是否提供PInvoke? 例如对于单声道项目? 如果Linux和Mac OS X支持PInvoke,你能给我一些例子或参考答案。 谢谢。

在Linux上使用Mono进行原生P / Invoke:DllNotFound

我正在尝试使用mono加载一些本机linux库。 我用debugging标志运行单声道: Mono: DllImport attempting to load: 'libavformat.57'. Mono: DllImport error loading library '/home/filoe/Desktop/cscore/cscore/Samples/LinuxSample/bin/Debug/libavformat.57': '/home/filoe/Desktop/cscore/cscore/Samples/LinuxSample/bin/Debug/libavformat.57: cannot open shared object file: No such file or directory'. Mono: DllImport error loading library '/home/filoe/Desktop/cscore/cscore/Samples/LinuxSample/bin/Debug/libavformat.57.so': 'libavcodec.so.57: cannot open shared object file: No such file or directory'. Mono: DllImport error loading library '/usr/lib/libavformat.57': '/usr/lib/libavformat.57: cannot open shared object file: No […]

ActivateDeviceEx是否启动驱动程序?

我正在开发一个Windows Mobile 6.1应用程序,我遇到了一个问题,当移动设备停靠时,它将加载用于以太网连接的USB驱动程序,并在卸载时卸载它。 几次驱动程序似乎不加载,所以我的解决scheme是从应用程序本身手动加载它。 以下是我的P / Invoke声明和用法: [DllImport("Coredll.dll")] extern static IntPtr ActivateDeviceEx(string device, IntPtr regEnts, UInt32 cRegEnts, IntPtr devKey); IntPtr handle = ActivateDeviceEx( "Drivers\\USB\\ClientDrivers\\ADMTEK_LANUSB_Driver", IntPtr.Zero, 0, IntPtr.Zero); 我得到一个有效的句柄,但是我的问题是,激活设备驱动程序时发生了什么? 我的问题是,驱动程序不是自动获得局域网连接,是我做得足够强迫它这样做?

WindowProc何时被调用?

在我使用P / Invoke的C#程序中,我更改了我的窗口的过程地址。 所以我可以对我感兴趣的Windows消息作出反应。 但是什么时候该系统调用的过程呢? 我有列表,我操纵我的自定义过程,并在我的代码的其余部分。 系统如何决定何时可以或不可以调用该过程,是否有数据可能被破坏的机会? 例如 我将条目添加到我的过程中的列表。 我通读清单并处理我的代码的另一部分的条目。 在我设法清除列表之前,该过程接pipe并添加更多条目。 返回到我的代码的其他部分,列表被清除,新的条目被丢弃而不被处理。

如何从Powershell调用GetStdHandle,GetConsoleMode?

尝试使用Add-Type方法从Powershell脚本读取当前Windows控制台模式时出现错误: $MethodDefinitions = @' [DllImport("kernel32.dll", SetLastError = true)] static extern IntPtr GetStdHandle(int nStdHandle); [DllImport("kernel32.dll", SetLastError = true)] static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode); '@ $Kernel32 = Add-Type -MemberDefinition $MethodDefinitions -Name 'Kernel32' -Namespace 'Win32' -PassThru $hConsoleHandle = $Kernel32::GetStdHandle(-11) # STD_OUTPUT_HANDLE $lpMode = 0 $Kernel32::GetConsoleMode($hConsoleHandle, $lpMode) 但是我得到以下警告和错误: WARNING: The generated type defines no public methods […]

访问模拟帐户的私钥

我正在开发一个旨在模拟另一个帐户的程序,然后使用来自模拟帐户密钥库的私钥解密文件。 问题是,虽然我能够打开模拟帐户的证书存储并使用适当的证书实例化X509Certificate2对象,但是当程序试图访问私钥时,我收到一个exception: System.Security.Cryptography.CryptographicException:系统找不到指定的文件…在System.Security.Cryptography.X509Certificates.X509Certificate2.get_PrivateKey() 我能够find模拟用户的私钥在文件系统中使用FindPrivateKey.exe实用工具,并发现它位于C:\ Users \ TESTUSR \ AppData \ Roaming \ Microsoft \ Crypto \ RSA …我用这篇文章作为指导,以确保我自己的帐户有权访问私钥文件。 我确实可以从NTFS的angular度访​​问密钥文件,因为我可以在记事本中加载它(虽然显然是jiberish)。 很偶然的是,我发现如果我通过使用runas预先加载模拟帐户的本地configuration文件,那么该程序就可以工作,例如,以该用户的身份打开命令提示符。 任何build议将不胜感激! class Program { [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, out SafeTokenHandle phToken); [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public extern static […]

我如何获得所有进程的打开句柄集

我想知道一个文件是否被任何进程打开(包括调用者)已经发布了一些build议,这些build议往往围绕着试图独占地打开文件并捕获exception。 在我的例子中,这并没有被certificate是一个傻瓜式的方法。 我相信我可以通过扫描所有正在运行的进程的Filetypes的所有打开的句柄来获得我的具体情况。

如何从本地应用程序获取窗口打开/closures/最小化消息?

为这个写一个好的标题是很难的。 我正在研究一个WPF应用程序,它需要知道系统上所有其他打开的窗口的存在。 我可以通过调用本地的EnumWindows方法来完成,我可以调用其他本地方法来过滤掉我感兴趣的窗口。这很好。 我遇到的问题是,我想知道何时打开或closures一个窗口(理想情况下,最小化)。 我可以通过使用EnumWindows轮询来做到这一点,但是我发现速度很慢,即使我把它推到另一个线程。 有没有更好的方法来获取窗口的通知打开/closures/最小化? 请记住,我对非托pipe代码的知识是相当有限的。