Tag: winapi

是否可以使用wincrypt进行HMAC?

我一直在尝试使用wincrypt / cryptoapi / Cryptography API执行直接的SHA256 HMAC:下一代(CNG),我真的很挣扎。 我的目标是Windows 8。 我找不到正确的方法或在任何地方找到任何例子。 我希望在C / C ++中执行以下操作,这在下面的C#中进行了演示 HMAC hashMaker = new HMACSHA256(Encoding.ASCII.GetBytes(“SecretKey”)); byte[] hash = hashMaker.ComputeHash(Encoding.ASCII.GetBytes(“”)); string hashStr = BitConverter.ToString(hash); 它返回哈希:B2-42-48-67-5A-B8-03-87-5B-00-D7-8C-65-5A-AE-B7-92-E3-F9-27-40-C1-01 -A5-37-74-E1-65-51-9F-F6-6A。 有没有人成功使用cryptoapi执行直接HMAC?

如何确定DIB是自下而上还是自上而下?

如果我使用CreateDIBSection()创建一个DIB,我可以通过将BITMAPINFOHEADER结构的biHeight字段设置为负值或正值来指定它应该是自顶向下还是自底向上。 但是,如果我在这样的位图上调用GetObject()来填充DIBSECTION结构,那么dsBm.bmHeight和dsBmih.biHeight似乎总是正数。 当我拥有的是HBITMAP时,有没有办法找出DIB是自上而下还是自下而上?

更改Win32 Windows项目中的默认窗口字体

我正在使用C和Win32 api创建一个GUI应用程序。 我想知道如何将主窗口的默认字体更改为thaoma。 我是从.NET背景出来的。 在.NET中,如果我们更改父控件的字体,那么子控件会自动inheritance该字体….是否有类似于它或我们需要手动设置每个控件的字体….. 考虑以下代码…… #include #define ID_EDIT 1 #define ID_BUTTON 2 LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static HWND hwndEdit; static HWND hwndButton; static int len; static TCHAR text[30]; switch(msg) { case WM_CREATE: hwndEdit = CreateWindow(TEXT(“Edit”), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 50, 50, 150, 20, hwnd, (HMENU) […]

如何使用win32 api将文件所有权转让给当前用户

我想使用win32 api获取文件所有权,我希望我的代码可以在xp和win7上运行 无论如何,这就是我想出的 更改文件所有权的函数 int ChangeFileOwner() { HANDLE token; char *filename = “c:\\file1.txt”; //(not owned by the current user) DWORD len; PSECURITY_DESCRIPTOR security = NULL; int retValue = 1; PSID sid; // Get the privileges you need if (OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &token)) { if(!SetPrivilege(“SeTakeOwnershipPrivilege”, 1))retValue=0; if(!SetPrivilege(“SeSecurityPrivilege”, 1))retValue=0; if(!SetPrivilege(“SeBackupPrivilege”, 1))retValue=0; if(!SetPrivilege(“SeRestorePrivilege”, 1))retValue=0; } else retValue = 0; […]

xp主题控制的透明背景

我在位图上绘制了一些窗口控件,在对话框上绘制了彩色背景。 是否有一些可能的方法使窗口控件的背景透明? 目前,它们显示对话框的默认彩色背景。 示例 – 我尝试粘贴纯蓝色位图,两个按钮控件具有明显的默认彩色矩形背景。

为什么我在使用WS_EX_CONTEXTHELP时看不到问号?

我正在学习WinAPI。 MSDN : WS_EX_CONTEXTHELP 窗口的标题栏包含问号。 当用户单击问号时,光标将变为带有指针的问号。 如果用户然后单击子窗口,则子项将收到WM_HELP消息。 子窗口应该将消息传递给父窗口过程,该过程应该使用HELP_WM_HELP命令调用WinHelp函数。 “帮助”应用程序显示一个弹出窗口,该窗口通常包含子窗口的帮助。 WS_EX_CONTEXTHELP不能与WS_MAXIMIZEBOX或WS_MINIMIZEBOX样式一起使用。 当我尝试在我的代码中使用WS_EX_CONTEXTHELP ,我没有看到问号。 我没有在我的代码中指出WS_MAXIMIZEBOX或WS_MINIMIZEBOX值: 为什么会这样? 我的“Hello World”代码: #include #include #include #include using namespace std; #define APP_RC_SUCCEEDED 0 #define APP_RC_UNHANDLED_EXCEPTION 1 #define APP_RC_UNKNOWN_ERROR 2 #define APP_RC_WINDOW_CLASS_WAS_NOT_REGISTERED 3 #ifdef UNICODE #define TCOUT std::wcout #define TCIN std::wcin #define TCERR std::wcerr #else #define TCOUT std::cout #define TCIN std::cin #define TCERR […]

使用可编辑的子项正确处理listview中的子项目编辑(或取消子项目编辑)

介绍: 我正在尝试使用可编辑的子项实现listview控件。 对于项目/子项目的就地编辑,我使用编辑控件。 我相信我已经成功地将编辑控件放置在item / subitem上面。 问题: 我不知道我应该在哪些事件上结束/取消子项目编辑(隐藏编辑控件,设置子项目文本等)以及我该怎么做。 为了澄清,我说的是用户完成/取消现场编辑的时刻。 此时不再需要编辑控件,所以我应该隐藏它(我不喜欢每次都重新创建它;我相信创建它一次然后在需要时显示/隐藏它更有效)。 我的目标是Visual Studio中的属性窗口所具有的行为(请参阅附图,以查看我所指的窗口)。 当用户按下ESC键/点击另一个窗口/点击滚动条等时,我希望以与此窗口相同的方式实现编辑/取消。 我努力解决这个问题: 使用谷歌,我发现很少的例子,但它们已经陈旧,并没有解决所有相关案例,所以这就是我在这里寻求帮助的原因。 但是,我能够发现我必须考虑的事件之一是EN_KILLFOCUS ,用户按ESC / ENTER键的情况和用户点击编辑控件以外的其他情况。 编辑: 我设法处理ESC和ENTER键,以及用户点击另一个兄弟控件或用ALT + TAB切换窗口时的情况。 我已经更新了SSCCE的相关更改 题: 为了实现网格的默认行为(如果有一个用于Windows应用程序),我必须处理哪些消息/事件? 你还能指出我应该在哪里编辑子项并隐藏编辑控件,我应该在哪里隐藏编辑控件? 编辑: 我唯一的问题是当用户点击列表视图滚动条或主窗口的背景时处理这种情况。 我只是不知道如何处理这个,并希望得到我能得到的所有帮助。 相关信息: 我在Windows 7 x86上使用Visual Studio 2013; 我正在使用原始WinAPI在C ++中开发; SSCCE: 以下是我到目前为止的解决方案。 我试图彻底评论它,但如果需要更多信息,请留言,我将更新我的post。 #include #include // various listview macros etc #include #include // swprintf_s() // enable Visual […]

使用GetEffectiveRightsFromAcl()获取访问权限..?

我正在尝试检查特定受托者的特定文件的权限,并使用win32 API GetEffectiveRightsFromAcl()。 当域组可以访问该文件时,当使用本地帐户(admin或其他)执行该function时,该函数返回5(拒绝访问)。 这三个语句总结了我在GetEffectiveRightsFromAcl()中看到的行为: 当域组拥有该文件的权限并且该程序在本地帐户下运行时:访问被拒绝。 域组具有该文件的权限,并且该程序在域帐户或本地系统:成功下运行 当域组没有该文件的权限且该程序在任何帐户下运行时:成功 有谁知道这背后的原因? 在我看来,这与Active Directory安全性有关。 什么设置可能会影响这个,什么是调试它的好方法? 另外,我听说GetEffectiveRightsFromAcl()可能通常存在问题并且使用AccessCheck()代替。 但是,我需要能够获取任意SID并检查它对文件的访问权限,因为AccessCheck()需要模拟令牌,我不知道如何从任意SID中获取令牌…任何想法? 谢谢 短发

C和Windows API之间有什么关系?

我在SO上查看了一些其他问题,并且不清楚c是否构建在WINAPI之上,之下或旁边。 例如,有人可以用纯c写一些能够打开窗口的东西,还是需要使用windows api? 我注意到打开文件(fopen)的c(库?)版本与windows API版本(CreateFile)之间的相似之处让我想知道是否只是另一个的包装器。 有人知道吗? 如果Windows正在运行; 是一个程序员被迫使用windows api编程来运行它,或者程序员根本不使用windows api并直接访问硬件(即Windows操作系统是否保护对硬件的访问)? 哪个在windows ce的不同版本的windows之间更容易移植。 我发现的文档(现在已经改变了)曾经说过CreateFile只能回到windows ce的2.0版本(这里: http : //msdn.microsoft.com/en-us/library/ms959950.aspx – 请注意注意事项在最底部的链接上显示支持的版本信息已更改)。 那么应该用于windows ce版本1的是什么? 换句话说,使用c函数编程或标记为WINAPI的函数更可能适用于所有版本的Windows CE? 我在一本关于编程windows ce的书中读到以下内容并且它使我感到困惑,所以在理解以下内容时可以更好地理解上述所有问题: Windows CE支持在Windows NT和Windows 98上找到的大多数相同的文件I / O函数。支持相同的Win32 API调用,如CreateFile,ReadFile,WriteFile和CloseFile。 但是,Windows CE程序员必须注意一些差异。 首先,Windows CE不支持标准C文件I / O函数,如fopen,fread和fprintf。 同样,不支持旧的Win16标准,_lread,_lwrite和_llseek。 这不是一个很大的问题,因为所有这些函数都可以通过用少量代码包装Windows CE文件函数来轻松实现。 我对包装的理解是你必须有一些东西可以包装,考虑到win16和c库不可用,他是否说要包装CreateFile函数来制作你自己的类似fopen的版本? (我所知道的唯一另一件事是assembly,如果这是他建议包装的话,就不会以这种随意的方式写出来。) 鉴于上述情况,c语言(语法,数据结构,流控制),c函数库(例如fopen)和windows api(例如CreateFile)之间的依赖关系是什么?

什么是LPTHREAD_START_ROUTINE?

我似乎无法为C语言找到LPTHREAD_START_ROUTINE的任何文档。 我发现了这个,但是它适用于.NET Framework 4.5并且已被弃用: http : //msdn.microsoft.com/en-us/library/aa964928.aspx 我想知道的原因是因为我需要它来创建CreateThread: http : //msdn.microsoft.com/en-us/library/windows/desktop/ms682453%28v=vs.85%29.aspx