Articles of c + +

WinHyptoAPI没有validationphp openssl签名的string

我正在使用php openssl签署一些文本,并尝试使用CryptoApi在Windows应用程序中进行validation,但validation总是失败。 请帮我一下 PHP代码: <?php $data = "data that is to be hashed and signed."; $private_key = <<<EOD —–BEGIN RSA PRIVATE KEY—– MIIBOgIBAAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6zxqlVzz0wy2j4kQVUC4Z RZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQJAL151ZeMKHEU2c1qdRKS9 sTxCcc2pVwoAGVzRccNX16tfmCf8FjxuM3WmLdsPxYoHrwb1LFNxiNk1MXrxjH3R 6QIhAPB7edmcjH4bhMaJBztcbNE1VRCEi/bisAwiPPMq9/2nAiEA3lyc5+f6DEIJ h1y6BWkdVULDSM+jpi1XiV/DevxuijMCIQCAEPGqHsF+4v7Jj+3HAgh9PU6otj2n Y79nJtCYmvhoHwIgNDePaS4inApN7omp7WdXyhPZhBmulnGDYvEoGJN66d0CIHra I2SvDkQ5CmrzkW5qPaE2oO7BSqAhRZxiYpZFb5CI —–END RSA PRIVATE KEY—– EOD; $public_key = <<<EOD —–BEGIN PUBLIC KEY—– MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBANDiE2+Xi/WnO+s120NiiJhNyIButVu6 zxqlVzz0wy2j4kQVUC4ZRZD80IY+4wIiX2YxKBZKGnd2TtPkcJ/ljkUCAwEAAQ== —–END PUBLIC KEY—– EOD; $binary_signature = ""; // At least with PHP 5.2.2 […]

为什么会死锁/死锁? (视窗)

我有一个目录更改监视器进程,从一组目录中的文件读取更新。 我有另一个进程,执行很多文件到这些目录(testing程序)的小写入。 图中大约有100个目录,每个文件有10个文件,每秒约有500个文件被修改。 运行一段时间之后,目录监视进程挂起一个调用fclose()的方法,该方法基本上拖尾了文件。 在这个方法中,我fopen()文件,检查句柄是否有效,做一些查找和读取,然后调用fclose() 。 这些读取全部由该进程中的相同线程执行。 挂起之后,线程永远不会前进。 我无法find关于为什么fclose()可能会死锁而不是返回某种错误代码的任何好消息。 文档确实提到了_fclose_nolock() ,但似乎并没有提供给我(Visual Studio 2003)。 debugging版本和发布版本都会发生挂起。 在一个debugging版本中,我可以看到fclose()调用_free_base() ,它在返回之前挂起。 某种调用kernel32.dll => ntdll.dll => KernelBase.dll => ntdll.dll正在旋转。 下面是ntdll.dll中无限循环的程序集: 77CEB83F cmp dword ptr [edi+4Ch],0 77CEB843 lea esi,[ebx-8] 77CEB846 je 77CEB85E 77CEB848 mov eax,dword ptr [edi+50h] 77CEB84B xor dword ptr [esi],eax 77CEB84D mov al,byte ptr [esi+2] 77CEB850 xor al,byte ptr [esi+1] […]

用C代码计算函数时间(纳秒)

我需要知道如何在C代码中以纳秒为单位计算函数的时间。 我试图重复该function,直到消耗一些微秒。 time.h中是否有其他的函数可以用来计算纳秒的时间?

Windows用户界面自动化不显示所有子元素?

我在窗体上有一个TreeView控件,我recursion地浏览窗口本身开始的另一个窗口的元素。 我正在使用它来查找元素: getRecursiveElements(AutomationElement parent) { children = parent.FindAll(TreeScope.Children, Condition.TrueCondition); foreach (AutomationElement child in children) { addToTreeView(child); getRecursiveElements(child); } } 一般来说,代码在大多数情况下工作得很好。 树被填充,我有一些其他的支持代码允许我双击,例如,在树视图中的元素,它会突出显示目标表单上的元素。 我遇到的问题是,虽然它产生了一个令人敬畏的树,但仍有一些元素缺less某些目标程序。 有什么可能的原因,有没有办法解决这个问题? 如果我从user32.dll调用EnumChildWindows()会有同样的问题?

MFC CWinApp程序中的input框?

我需要一个UI程序中的input框,这个input框已经从CWinnApp类派生并使用了MFC。 我看到它是使用消息框,但我没有看到任何input框的例子…. 我该怎么做呢? (在C ++中使用Visual Studio 6.0) 谢谢。

Windowspath中的多个反斜杠有什么后果?

在我的程序中,我经常有在我的app.config文件中configuration的文件名和/或path。 这通常会是这样的: <add key="LogFileDirectory" value="C:\Logs" /> <add key="SaveLogFileTo" value="MyLogFile.txt" /> 在我的实际应用程序代码中,我经常将这些代码连接在一起,代码如下所示: var logFile = ConfigurationManager.AppSettings["LogFileDirectory"] + @"\" + ConfigurationManager.AppSettings["SaveLogFileTo"]; 现在,以上代码的结果会给出一个日志文件pathC:\Logs\MyLogFile.txt ,但是,如果最终用户将configuration文件中的日志文件目录指定为C:\Logs\并带有尾部反斜杠,我的代码导致C:\Logs\\MyLogFile.txt的实际path在目录和文件之间具有双反斜线。 根据我的经验,这在实践中运行良好。 事实上,即使在命令提示符下执行cd c:\\\\\\windows\\\可以在实践中使用。 我的问题是,如果有这样的path会有什么结果呢? 我不希望在生产代码中使用这个“特性”,如果这些特性是无证的,并且在未来某个时候会被新的Windows版本打破。

将std :: string转换为const BYTE *(对于RegSetValueEx()

我有一个函数,得到一个std ::string。 该函数调用 函数RegSetValueEx 第五个参数是registry值的值,并且需要const BYTE *types的variables。 所以我必须将std :: string转换为const BYTE *,并将结果数组的长度作为第6个参数。 我已经find了一个方法来做到这一点,但它感觉很难看,我真的不明白是怎么回事。 这是一个减肥版本的function: void function(const std::string& newValue) { HKEY keyHandle; if(RegOpenKeyEx(HKEY_CLASSES_ROOT, TEXT("some key"),0,KEY_ALL_ACCESS,&keyHandle) == ERROR_SUCCESS) { std::wstring wNewValue; wNewValue.assign(newValue.begin(),newValue.end()); if (RegSetValueEx(keyHandle, TEXT("some value"), NULL, REG_SZ, (const BYTE*)(LPCTSTR)(wNewValue.c_str()), wNewValue.size()*2)==ERROR_SUCCESS) { //do something } RegCloseKey(keyHandle); } } 正如你所看到的,我首先做一个宽string(UNICODE被定义),然后使用双重强制转换,并且长度必须做* 2,否则它只会设置inputstring的一半。 这种forms是否正常/最好的方式来做到这一点? 为什么* 2,有什么更好的办法?

从其他进程读写

我想能够读取和写入另一个进程的内存。 我从Kernel32.dll调用函数Readprocessmemory()和WriteProcessmemory() ,并使用GetProcessByName()函数来查找进程。 这成功了。 我看到了readprocessmemory()函数的示例,并在我从kernel32.dll调用它之后声明它,但我不明白它是如何工作的 – 如何使用函数从另一个进程读取? 我会很感激一个例子。

从键盘获取input,而无需等待input

像fgets()和getch()这样的函数将在继续之前等待用户inputinput。 我想要的是这个function:如果用户按下“x”,variables将开始递减,“c”将导致variables开始递增。 问题是当我尝试获得input时程序停止。 我希望variables在等待用户input的同时继续递增或递减,不要“冻结”。 我正在使用visual studio 2008,编写交stream控制台应用程序。 谢谢!

LoadImage()返回NULL,GetLastError()返回0

我一直在不同的论坛上寻找答案,但似乎没有匹配我的情况… 我正在使用Windows 7,VS2010。 我有一个应用程序使用计时器来调用任务栏刷新function。 在任务栏function中,调用LoadImage()从资源文件中获取图标图像,最终到达任务pipe理器(带有shell_notifyicon)。 在运行应用程序时,这似乎在最初几个小时内工作正常,但是突然之间LoadImage()开始失败(它总是尝试加载的.ico文件)并返回NULL。 我已经插入一个GetLastError调用,但它总是返回0(表示成功)。 形象本身还是好的,有效的,我没办法解释。 任何线索? 任何帮助非常感谢! 这是一个代码片段: if (ghInst && hwnd) { DWORD err; // Update Tray Icon Here small_icon=LoadImage(ghInst, MAKEINTRESOURCE(IconId), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), 0); err = GetLastError(); if (!small_icon) { LPVOID lpMsgBuf; //DWORD err = GetLastError(); FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); […]