Articles of winapi

Tomcat Windows服务(Apache Commons procsrv)“用户名或密码不正确”

我已经花了2天时间试图让这个工作,并希望有人能够指出我在正确的方向… 我正在尝试将Windows Server 2012 R2上的Tomcat 8作为特定用户名的服务运行。 由于我的应用程序的复杂性,我直接运行tomcat8.exe // IS / …而不是使用service.bat脚本。 当服务运行时,我在公共日志中得到这些错误: [2016-05-31 18:00:14] [debug] ( prunsrv.c:1679) [ 3280] Commons Daemon procrun log initialized [2016-05-31 18:00:14] [info] ( prunsrv.c:1683) [ 3280] Commons Daemon procrun (1.0.15.0 64-bit) started [2016-05-31 18:00:14] [info] ( prunsrv.c:1580) [ 3280] Debugging 'CertAccordServer' service… [2016-05-31 18:00:14] [debug] ( prunsrv.c:1374) [ 3280] Inside […]

如何使每个进程访问同步互斥?

我需要使用全局互斥来同步多个进程对共享文件的访问。 我创build这个互斥体: HANDLE hMutex = ::CreateMutex(NULL, FALSE, L"Global\\MySpecialName"); 然后用于: //Entering critical section VERIFY(::WaitForSingleObject(hMutex, INFINITE) == WAIT_OBJECT_0); 接着: //Leave critical section VERIFY(::ReleaseMutex(hMutex)); 这个问题是由于共享这个互斥体的进程是一个本地系统服务以及几个用login用户的凭证运行的用户模式进程而引起的。 因此,如果互斥体是由服务首先创build的,那么当用户模式进程尝试打开它时, CreateMutex失败,错误代码为ERROR_ACCESS_DENIED 。 在创build之前,我正在阅读指定互斥锁的安全描述符,但是我似乎无法弄清楚如何使其可以被everything访问,我真的不需要任何复杂的东西吗?

当基于CDialog的应用程序启动时,如何将辅助对话窗口置顶?

我编写了CDialog基于MFC CDialog的应用程序。 在正常情况下,它通过从InitInstance处理程序显示CDialog窗口来启动,如下所示: CMyDialog dlg; INT_PTR nResponse = dlg.DoModal(); 但是,第一次运行这个应用程序时,我需要在屏幕上显示主对话框之前,在CMyDialog::OnInitDialog显示另一个对话框。 所以我做了类似的事情: CIntroDialog idlg(this); idlg.DoModal(); 但是这个方法的问题是我的第二个CIntroDialog没有显示在前台。 所以我试图通过在CIntroDialog::OnInitDialog调用以下来解决这个问题: this->SetForegroundWindow(); this->BringWindowToTop(); 但它没有做任何事情。 然后我尝试调用::AllowSetForegroundWindow(ASFW_ANY); 从InitInstance的应用程序,并没有做任何事情。 任何想法如何使应用程序启动时,第二个对话框前台? PS。 由于这个应用程序的结构,我需要从CMyDialog::OnInitDialog调用CIntroDialog::DoModal ,以防止广泛的重写。

在Windows上第二次使用libxml2崩溃

我一直在使用libxml2 push parsing(SAX)parsing一个传入的XMLstream,这个工作很好,但每次都会崩溃,我的代码如下所示: xmlSAXHandler saxHandler; memset(&saxHandler, 0, sizeof(m_SaxHandler)); xmlSAXVersion(&saxHandler, 2); saxHandler.initialized = XML_SAX2_MAGIC; // so we do this to force parsing as SAX2. saxHandler.startElementNs = &startElementNs; saxHandler.endElementNs = &endElementNs; saxHandler.warning = &warning; saxHandler.error = &error; saxHandler.characters = &characters; xmlParserCtxtPtr pSaxCtx = xmlCreatePushParserCtxt(&m_SaxHandler, this, 0, 0, 0); 然后使用xmlParseChunk() XMLstream,并使用callback来处理数据,一旦parsing完成,我调用xmlFreeParserCtxt(pSaxCtx)来释放上下文。 正如我所提到的,这一切都完美的第一组数据,但是当代码再次运行,我得到一个访问冲突,堆栈跟踪是: ntdll.dll!_RtlpWaitOnCriticalSection@8() + 0x99 bytes ntdll.dll!_RtlEnterCriticalSection@4() + […]

我可以使用CreateFile,但强制句柄到一个std :: ofstream?

有没有办法利用Win32 API中的文件创build标志,如FILE_FLAG_DELETE_ON_CLOSE或FILE_FLAG_WRITE_THROUGH ,如http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx所述 ,但是然后强制该句柄成std :: ofstream? 与stream媒体的接口显然是平台独立的; 我想强制一些依赖于平台的设置在“引擎盖下”。

好或坏 – SetParent()win32 API在不同的进程之间

SetParent函数需要一个子窗口和新的父窗口句柄。 当子窗口处于不同的Windows进程中时,这也似乎工作。 我曾看过一篇声称这不是官方支持的post ,但目前的文档没有提到这一点。 这是目前文件中的缺陷,还是这种行为改变? HWND WINAPI SetParent( __in HWND hWndChild, __in_opt HWND hWndNewParent );

窗口 – 如何枚举所有连接的USB设备的设备path?

我正在尝试使用SetupDi函数来枚举所有连接的USB设备的设备path。 设备path是CreateFile()中使用的path,所以我可以与设备进行通信。 但是, SetupDiGetDeviceInterface需要一个接口GUID,但我并不特别寻找特定的接口(除了所有连接的USB)。 这部分已被评论为/ * ??? * /在下面的源代码中。 尝试解决scheme: 我尝试提供GUID_DEVCLASS_UNKNOWN = {0x4d36e97e,0xe325,0x11ce,{0xbf,0xc1,0x08,0x00,0x2b,0xe1,0x03,0x18}}; 但是这抛出了一个“没有更多的接口”的错误。 我也尝试提供deviceInfoData.ClassGuid到SetupDiGetDeviceInterface,但我得到了同样的错误,如上所述,“没有更多的接口”。 问题: 是否有覆盖所有USB设备的通用接口类? (HID,通用等) 还是有一个替代function,将给我的设备的path? (由SetupDiGetDeviceInterfaceDetail返回的SP_DEVICE_INTERFACE_DETAIL_DATA结构的Instread)。 资源: HDEVINFO deviceInfoList SP_DEVINFO_DATA deviceInfoData; deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); SP_DEVICE_INTERFACE_DATA deviceInterfaceData; PSP_DEVICE_INTERFACE_DETAIL_DATA deviceInterfaceDetailData = NULL; DWORD requiredLength = 0; char *hardwareID = 0; // Retrieve a list of all present devices deviceInfoList = SetupDiGetClassDevs(NULL, NULL, NULL, […]

我怎样才能模拟在x,y坐标,使用SendInput的双击鼠标(我khow句柄)上的双击鼠标?

我怎样才能模拟双击鼠标点击窗口(我知道这个窗口的句柄)在x,y坐标,使用SendInput?

如何“安全”删除文件夹到回收站

我正在寻找一种方法将文件夹(与子文件夹)放入一个回收站与这些条件: 它必须默默地完成 – 没有任何 Windows用户界面。 该文件夹不能永久删除。 如果它不能被放入回收站,我希望API失败。 获取像CopyFileEx这样的过程的callback例程。 到目前为止,我能够想出这个: SHFILEOPSTRUCT sfo = {0}; sfo.wFunc = FO_DELETE; sfo.pFrom = L"K:\\test del from USB\0"; //Folder on a USB stick sfo.fFlags = FOF_ALLOWUNDO | FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR | FOF_WANTNUKEWARNING; int res = SHFileOperation(&sfo); BOOL bFullSuccess = res == 0 && !sfo.fAnyOperationsAborted; 在USB闪存驱动器上的文件夹可怕地失败,即,即使FOF_ALLOWUNDO标志被永久删除。 所以不pipe我是不是做对了,或者SHFileOperation API是错误的! […]

插入字节到文件的中间(在Windows文件系统中)而不读取整个文件(使用文件分配表)?

我需要一种方法将一些文件簇插入到文件的中间以插入一些数据。 通常情况下,我只是读取整个文件并将其重新写回,但这些文件的大小是几千兆字节,只需要30分钟即可读取文件并将其重新写回。 簇的大小不会打扰我; 我基本上可以写出零到我的插入群集的结尾,它仍然会以这种文件格式工作。 如何使用Windows File API(或其他一些机制)修改文件的文件分配表,在文件中间的指定位置插入一个或多个未使用的集群?