草庐IT

c++ - 仅使用句柄读取/写入文件

工作中遇到一个问题,我不确定答案。假设在一个进程中有一个目录的句柄。句柄设置了RW,可以说它指向桌面。有没有办法只使用句柄来读取文件或将文件写入桌面?感谢任何想法!编辑:澄清一下,这是在Windows上,是一个指向桌面的文件句柄。假设您已经知道句柄的值,并希望在同一进程中使用它,以便将文件读/写到它指向的桌面。允许使用任何代码,包括WindowsAPI。 最佳答案 您可以使用GetFinalPathNameByHandle()在目录句柄上获取路径名,将要写入的文件附加到它的末尾,然后使用CreateFile()和往常一样。

c++ - 获取 FILE * 句柄而不实际在磁盘上创建文件

我需要使用无法修改的遗留库处理一些数据。我的问题是它需要一个普通的旧FILE句柄来保存它的结果,而且我被要求根本不要在磁盘上写任何东西。我知道没有标准的方法可以做到这一点,但是是否有可能使用WindowsAPI、boost或其他任何方法来获取指向内存的文件句柄?我在任何地方都找不到明确保证不(系统地)执行任何磁盘访问的解决方案。 最佳答案 我相信你可以fopen一个管道,使用管道语法:fopen("\\\\.\\pipe\\WritePipe","w+");您需要事先使用CreateNamedPipe创建管道,但是一旦完成,您应该能

c++ - 假定 Windows 伪句柄的值是否安全/已定义?

我正在为Windows编写一段C++代码,需要查询进程及其每个单独线程的计时。为了进行必要的系统调用,我需要进程及其每个线程的句柄。我正在使用getCurrentProcess和getCurrentThread函数,它们都返回一个伪句柄。经过进一步检查,我注意到所有线程的伪句柄共享相同的值。在互联网上简单搜索后,我发现以下文章报告了与我得到的进程和线程伪句柄相同的值:https://weseetips.wordpress.com/2008/03/26/getcurrentthread-returns-pseudo-handle-not-the-real-handle/我的问题:从一个线

windows - 当应用程序崩溃时打开句柄会发生什么? (从 Windows XP 开始)

我的印象是,如果一个应用程序有一个打开的句柄并且它崩溃了,句柄不会被释放,如果您尝试访问该句柄(比方说一个文件),那么您将收到错误。但是,我已经在WindowsXP及更高版本中尝试过此操作,如果我从任务管理器中关闭exe,则句柄似乎会在它关闭句柄之前释放。以下是代码:PrivateSubForm_Load()DimiFileAsIntegeriFile=FreeFileOpen"myfilelock"ForOutputLockReadWriteAs#iFileMsgBox"Abouttoclose"'closeitherewithtaskmanagerClose#iFileEndSub

c# - 处理无效的窗口句柄

应用程序使用Enum*例程检索窗口句柄。碰巧在应用程序管理枚举/创建窗口的句柄(获取类名、窗口统计...)时,句柄不再有效。管理窗口句柄的代码使用try/catchblock进行保护,但窗口句柄被存储并连续用于管理表示的窗口。如何处理窗口句柄的生命周期?是否可以检测句柄无效?每次应用程序使用窗口句柄时,我都想避免try/catchblock。 最佳答案 窗口句柄只有在创建窗口的线程中使用时才是安全的。从任何其他线程,您对窗口句柄的了解是,它在过去的某个时间是有效的。现在,它可能是也可能不是,如果是,它可能指的是与预期完全不同的窗口。

c - 如何进行 Windows 句柄继承

我有父进程和子进程,在父进程中我声明句柄将被继承,如http://msdn.microsoft.com/en-us/library/windows/desktop/ms724466%28v=vs.85%29.aspx:...SECURITY_ATTRIBUTESsa;sa.nLength=sizeof(SECURITY_ATTRIBUTES);sa.bInheritHandle=TRUE;sa.lpSecurityDescriptor=NULL;//CreateapipefortheParentprocess'sSTDOUT.if(!CreatePipe(&hChildReadPipe

c - 如何使用 C 从 Windows 中的文件句柄获取文件名?

我正在尝试从给定的文件句柄中检索文件名。我看过GetFileInformationByHandle可能有用,但它返回的结构不包含任何文件名信息(http://msdn.microsoft.com/en-us/library/aa363788%28v=VS.85%29.aspx)。我该怎么做?编辑:我已尝试安装WindowsFileIDAPI以使GetFileInformationByHandleEx在WindowsXP上运行。但是当包含fileextd.h时,出现以下错误c:\programmi\microsoftvisualstudio9.0\vc\include\fileextd.

c - HANDLE - 文件句柄和目录句柄结构

语言:C操作系统:Windows我的应用程序是用nt级别的api构建的,必须操作文件和目录句柄。在Zwopenfile或zwcreate文件上,我得到一个HANDLE作为结果。通常HANDLE的值类似于0x00000024、28,2c...等。当我将其转换为LPBYTE以查看内容时。VisualStudio显示“无法评估表达式”。我了解到从创建/打开文件api返回的HANDLE不是指向内存位置的指针。但是,Windows使用该值并执行文件操作。Ntquerydirectory对象为我提供了有关句柄的信息。然而,Windows是如何实现这个功能的还不得而知。任何人都可以阐明它。

c++ - 从线程中获取 native 句柄?

我正在使用VS2012,我想在运行的线程中设置线程优先级。目标是用最高优先级状态初始化所有线程。为此,我想为线程获取一个HANDLE。我在访问对应于thread对象的指针时遇到一些问题。这可能吗?从调用主线程,指针是有效的,从C++11线程它被设置为CCCCCCCC。可以预见的是,取消引用一些无意义的内存位置会导致崩溃。下面的代码是显示问题的简化版本。#include"stdafx.h"#include#include#include#include#include#includeusingnamespacestd;classthreadContainer{thread*mT;cond

c# - 从控制句柄获取进程

我有一个属于系统中另一个进程的控件的句柄。我怎样才能得到它所属的进程?我尝试查找合适的函数,但没有找到太多。 最佳答案 我想您所说的“控件句柄”是指HWND。然后,使用GetWindowThreadProcessIdHWNDhWndToSomeControl;[...]DWORDdwPid;GetWindowThreadProcessId(hWndToSomeControl,&dwPid);编辑:错误控制(在Windows7上测试):HWNDhWndToSomeControl;[...]DWORDdwPid;DWORDdwTid=G