Articles of winapi

移植win32代码(windows.h)到linux

我正在一个C ++项目,我有一堆Visual Studio生成的项目文件,我想端口到Linux。 我基本上是在Windows上的多个文件中使用windows.h头文件。 现在,我不确定,因为那里没有明确的存在linux.h文件(如果是这样,请指导我在哪里看)。 在Linux上,我使用Eclipse CDT进行开发。 我有两个想法,它可能会在Linux上工作,但我希望你的input知道什么是正确的方向是: (1)用C ++文件中的Linux API调用删除Windows API调用。 但是,这意味着,我不得不在Linux中find相同的function,我不知道在哪里看。 例如。 在Win32中的Filetime相当于在Linux中的东西(还没有发现这个东西)。 (2)我复制这些函数的基本语法(如在windows.h中写的),只是创build一个头文件(可以说我把它命名为linux.h),并将这个头文件包含在linux项目中。 所以,显然你可能已经发现我对如何推进事情感到困惑。 我只是想把这件事情搞清楚 除了以下内容,请给我build议/意见:(1)不,我不想使用Boost。 (2)我不想在Visual Studio中重写这些文件。

WTSEnumerateProcesses和terminal服务服务

调用WTSEnumerateProcesses()时,我的Windows服务偶尔会报告以下错误: 绑定句柄无效。 我怀疑这是由于无法使用terminal服务服务而引起的,尽pipe我已将terminal服务服务注册为我的服务的从属服务。 我相信,即使terminal服务服务正在运行,它还没有完成初始化(或正在closures),并且无法处理任何请求,从而导致错误。 我注意到WTSRegisterSessionNotification()的参考文档中的以下内容: Global \ TermSrvReadyEvent全局事件设置时,所有相关服务已启动,并且可以成功调用此函数。 这不会出现在WTSEnumerateProcesses()的文档中,但它同样适用? 意味着在Global\\TermSrvReadyEvent上尝试OpenEvent()会指示terminal服务服务实际上可用? 平台:Windows XP,Windows Vista和Windows 7

谁可以写入分配的地址?

我在Delphi中使用VirtualAllocEx在外部进程中保留内存,如下所示: var p : pointer; begin p := VirtualAllocEx(Process, nil, SizeOf(Integer), MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE); end; ProcessHandle之前已经用PROCESS_ALL_ACCESS 。 之后,我的程序写一个简单的整数值,像这样分配的地址: WriteProcessMemory(Process, p, @MyInteger, SizeOf(Integer), BytesWritten); 由于地址是存储在p – 我可以保存地址使用它的另一个应用程序。 另一个应用程序必须再次打开外部进程来访问/写入外部进程中的地址。 现在我的问题是:在外国过程中,谁能够读写这个地址? 是否允许每个进程写入? 每个进程都允许读取吗? 只有拥有pipe理员权限的进程才有权读/写? 感谢您的回答。

安全地使用Win32 API删除USB驱动器?

如何使用Win32 API删除USB驱动器? 我在embedded式系统上做了很多工作,其中一个就是将我的程序复制到U盘上,然后插入到目标硬件中。 由于我主要在控制台上工作,我不喜欢使用鼠标,每天点击一次小的任务栏图标一百次。 我很想编写一个小程序来做到这一点,所以我可以把它放到我的makefile中,但是我还没有find任何API调用来做同样的事情。 有任何想法吗?

Win32:如何通过hWnd在任务栏中隐藏第三方窗口

我必须隐藏第三方库中的popup窗口。 我已经用SetWindowsHookEx实现了windows钩子的东西,并知道所有新创build的hWnd(s)。 我听HSHELL_WINDOWCREATEDcallback,并执行以下操作: long style= GetWindowLong(hWnd, GWL_STYLE); style &= ~(WS_VISIBLE); // this works – window become invisible style |= WS_EX_TOOLWINDOW; // flags don't work – windows remains in taskbar style &= ~(WS_EX_APPWINDOW); SetWindowLong(hWnd, GWL_STYLE, style); 我在这里做错了在任务栏中隐藏新创build的窗口?

禁用缓冲redirect标准输出pipe道(Win32 API,C ++)

我使用CreateProcess从Win32生成一个进程,将STARTUPINFO的hStdOutput和hStdError属性设置为用CreatePipe创build的pipe道句柄。 我有两个线程读取pipe道,等待数据变为可用(或者进程完成,在此之前它检查在终止线程之前没有剩下数据)。 随着数据变得可用,我将输出写入一个有效的大文本框。 发生什么事是输出被缓冲,所以一个缓慢运行的过程只是获取文本框中的大块数据,而不是“正好发生”。 我不确定是否是进行缓冲的pipe道,或者与redirect有关。 有什么办法可以将pipe道设置为无缓冲的,或者以尽可能快的方式发送标准输出来启动进程? 我正在testing一个testing应用程序,相隔一秒打印行 Here is line one (waits one second) Here is line two (waits one second) … etc

我如何获得Windows中所有打开的命名pipe道的列表?

有没有简单的方法来testing你的命名pipe道是否正常工作? 我想确保从我的应用程序发送的数据实际上正在发送。 有没有一种快速简便的方法来获取所有命名pipe道的列表?

是否有API调用来开始扫描硬件设备

与此问题相关,但是…是否可以通过API触发新的硬件设备扫描? 我有一个串口蓝牙设备,我通过与32feet.net .NET蓝牙的 API调用自动配对,这很好地工作。 虽然我可以查询设备扫描中的串行服务,但COM端口不会显示在“蓝牙设备”对话框的“COM端口”选项卡中。

获取磁盘/集群号上的文件偏移量

我需要得到有关文件位于NTFS磁盘上的位置的任何信息。 绝对偏移,群集ID ..什么的。 我需要扫描磁盘两次,一次获得分配的文件,一次我需要直接在RAW模式下打开分区,并尝试find其余的数据(从删除的文件)。 我需要一种方法来理解,我发现的数据和我之前作为文件处理过的数据是一样的。 当我在原始模式下扫描磁盘时,我发现的数据的偏移量可以以某种方式转换为文件的偏移量(具有关于磁盘几何的信息)。 有没有办法做到这一点? 其他解决scheme也被接受。 现在我正在玩FSCTL_GET_NTFS_FILE_RECORD,但目前无法使其正常工作,我不确定这会有帮助。 UPDATE 我发现下面的函数http://msdn.microsoft.com/en-us/library/windows/desktop/aa364952(v=vs.85).aspx它返回包含nFileIndexHigh和nFileIndexLowvariables的结构。 文档说 The identifier that is stored in the nFileIndexHigh and nFileIndexLow members is called the file ID. Support for file IDs is file system-specific. File IDs are not guaranteed to be unique over time, because file systems are free to reuse them. In some […]

什么是REBASE.EXE的替代?

我需要重新绑定与我的程序一起安装的DLL文件组,因为这是一个32位程序,现在地址空间太碎了。 另外还有一个问题,就是在冷启动时需要将整个DLL分页到RAM中,这样加载器就可以将它们重新绑定,因为与某些DLL的基地址冲突。 有些DLL是我们编译的; 其他人来自第三方。 我想要做的是有一个工具重新绑定给定的一组DLL,这样的DLL组占用连续的内存块。 然后,这个工具将在编译安装程序之前运行,而重新发布的DLL将被安装在应用程序的专用目录中。 据我所知,Windows SDK附带的REBASE.EXE工具确实做到了。 给它一些DLL,并重新启动它们。 不幸的是… Windows 8 Consumer Preview的Windows软件开发工具包(SDK)说: 工具许多过时或已弃用的工具已从Windows SDK中删除。 以下工具已被删除: <snip> ReBase.exe 现在怎么办? 我不想开始使用显然已经过时的工具,它将在下一个版本的Windows中消失。 假设我正在阅读这个权利,什么是使用ReBase.exe的替代品? 我想限制自己使用Windows SDK和/或Visual Studio附带的工具,而不是引入第三方工具和/或编写自己的rebase代码。 或者,我以错误的方式接近整个问题?