草庐IT

c++ - 在异步模式下使用的 WinHttp - ERROR_INTERNET_CANNOT_CONNECT 如何干净地关闭连接

我在请求的回调过程中得到很多ERROR_INTERNET_CANNOT_CONNECT(12029代码)。我在异步模式下(在服务器上)使用WinHttp。在这种情况下,您如何干净地关闭连接。你只是使用这样的东西(就像你通常关闭连接一样?):::WinHttpSetStatusCallback(handle,NULL,0,0);::WinHttpCloseHandle(this->handle));我问这个是因为我在描述的情况下发生了一些与winhttpdll相关的奇怪内存泄漏(想要创建数百个可能被公司内部防火墙阻止或目标服务器丢弃连接的并发连接)。我已经在msdn上查看了WinHttp

windows - 我如何获得父窗口的孙子或孙子的儿子

我有一个主窗口类,例如file,每个文件窗口都有几个子窗口,例如pages,每个page有几个子窗口,例如文本框等等。我如何从文本框的句柄或文本框的子窗口之一获取文件的句柄。有一个函数GetParent(),但它返回上一级的父级,我正在寻找这样一个返回顶级窗口的函数。我编写了执行该操作的代码,如下所示,但我的问题是win32中是否有系统函数?HWNDGetTopLevelWindow(HWNDhChild){HWNDtopParent=0;HWNDh1=hChild;HWNDh2;while(topParent==0){h2=GetParent(h1);if(h2==0)topPare

c++ - WinHttpSetOption() 设置 TLSv1.2 失败,错误代码为 ERROR_INTERNET_INCORRECT_HANDLE_TYPE

我正在尝试使用提到的cpprestAPI调用从C++(Win)代码设置TLSv1.1或v1.2。但是WinHttpSetOption()失败并出现错误ERROR_INTERNET_INCORRECT_HANDLE_TYPE(12018)。操作系统:Windows(7/8)尝试通过注册表设置TLSv1.1和TLS1.2无效。尝试获取OpenSLL,但opensll1.0.1(支持TLS1.1及更多)不适用于Windows。尝试获取非native句柄未找到APIautofunc=[&](web::http::client::native_handlehandle){BOOLwin32Res

.net - 带有 winscard.dll 的 .NET 应用程序中的 ERROR_INVALID_HANDLE

我正在创建一个.NETWindows服务来与智能卡读卡器通信。主要组件是一个名为winscard.dll的WindowsDLL,我在.NET代码中将其与DLLImport属性一起使用。在WindowsXP32位上一切正常,但是当我在Windows7x64上运行它时,我在调用SCardTransmit时收到0x6ERROR_INVALID_HANDLE结果。该应用程序(作为命令行应用程序的服务)可以连接到读卡器,但无法从卡中读取任何内容。有什么想法吗? 最佳答案 SCardEstablishContext有问题,它将返回0但也处理0。

c++ - 将 HANDLE 转换为文件描述符

我有一个像这样的句柄:HANDLEhPipe=CreateNamedPipe(...)是否可以将hPipe转换为文件描述符(int)?我需要这个,因为我已经在C++中实现了一个代码来使用OpenSSL来处理TLS。这对TCP套接字来说就像一个魅力,但我真的需要在Namedpipe上使用它。OpenSSL的函数SSL_set_fd(SSL*ssl,intfd)只接受FileDescriptor,它是int,而不是HANDLE。注意:我也试过使用下面的函数,但没有用(返回3):intfd=_open_osfhandle(reinterpret_cast(hPipe),0);

windows - 我如何确定这个进程打开了什么句柄?

我正在调试我们的一个服务器进程的问题,该进程在60-90天内消耗大量句柄。服务器父进程生成并循环许多子进程,每个子进程大约每小时回收一次。父进程的句柄数将在两个月内增加到40k以上,但我不确定这些句柄到底引用了什么。使用ProcessExplorer,我可以看到句柄计数并列出了一些句柄(下图是示例)。但是,列出的句柄数并不接近上部Pane中显示的40k数。我在句柄窗口中有大约100个条目,通过查看它们的属性,我可以占这个窗口总句柄的大约3k,与总数40k相去甚远。我已将父进程设置为每隔几分钟循环一次它的子进程,以尝试查看它是否与循环子进程有关,但是监视一个小时似乎并没有导致父进程句柄计

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

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

c++ - 通过网络创建文件

我有两个程序读取和写入同一个文件。一个附加数据,另一个清除文件,然后重写所有数据。这两个程序在同一台计算机上交互良好,但是当我在另一台计算机上运行一个程序并通过我的本地网络打开文件时,我的追加似乎没有及时完成。我的流程如下:程序1:用打开文件handle=CreateFile(str.c_str(),FILE_READ_DATA|FILE_APPEND_DATA,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);写入数据使用:WriteFile(handle,line,strlen(line),&Written,NULL);关闭文件使用:Cl

c++ - 如何在 Windows 上预留内存并将以后的映射文件放入其中?

我想保留一个内存区域,然后将映射文件连续地放入保留的内存中。映射文件之间可能存在较大的时间间隔,在此期间其他函数可能会从堆中分配内存。映射后,文件可能无法取消映射并映射到新的内存位置。在Linux上会是这样的:#include#include#include#include#includeintmain(){void*memory=mmap(nullptr,getpagesize()*2,PROT_READ|PROT_WRITE,MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE,-1,0);//reservememoryinthandle1=::open(

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

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