扩展Windows API结构是安全的吗?
Is it safe to extend a Windows API structure?
我了解到,在严格的模式下,窗口(例如Hbrush)被定义为避免愚蠢错误的结构,我想知道这样做以下操作是否安全:
class WINBRUSH : public HBRUSH
现在我不是很精通C ,但这似乎是一个非常糟糕的主意。我想的是,因为Windows会分配这些对象,如果我不添加任何课程,我应该没事的。一个例子是:
class WINBRUSH : public HBRUSH__
{
public:
void GetRGB(BYTE* RgbArray)
{
LOGBRUSH LogBrush;
GetObject(this,sizeof(LOGBRUSH),&LogBrush);
RgbArray[0] = GetRValue(LogBrush.lbColor);
RgbArray[1] = GetGValue(LogBrush.lbColor);
RgbArray[2] = GetBValue(LogBrush.lbColor);
}
};
现在,我已经测试了上面的类,并检查了一下是否从GetRGB方法中获得了正确的值,但我只是想对此进行一些输入。预先感谢Damon。
测试代码:
WINBRUSH* Brush = (WINBRUSH*)CreateSolidBrush(RGB(1,2,3));
BYTE Rgb[3];
Brush->GetRGB(Rgb);
if((Rgb[0] == 1) && (Rgb[1] == 2) && (Rgb[2] == 3))
{
MessageBox(NULL, L"RGB values are correct!", L"Success!", MB_OK);
}
应该是安全的;这与如果有:
会发生什么。struct X
{
HBRUSH abc;
GetRGB(/* ... */) {}
}
也就是说,恕我直言,这很棘手,这是棘手的,而非成员函数void GetRGB(HBRUSH h, BYTE* result)
将更加清晰,并且更耐心地使用SDK的未来版本。a.GetRGB(b)
不比GetRGB(a, b)
更清楚。
如果您确实决定执行此操作,请确保添加static_assert
,以便以后有人尝试添加成员变量或无法编译的内容)
相关文章:
- 如何使用Windows API C++更改已创建的文件夹/目录安全权限
- 如何在Windows上检查EXE是否具有/GS安全保护
- 假定 Windows 伪句柄的值是否安全/定义?
- 如何以编程方式查找 Windows 上的活动安全提供程序
- 用C 写入Windows安全日志
- 扩展Windows API结构是安全的吗?
- Windows内核是否安全,不会在用户模式下发生损坏
- 假设所有Windows平台都在UCS-2 LE中是否安全
- 在C++std::streams中,失败后,如何获得失败原因?必需:线程安全,适用于Windows和Linux(或至少M
- 在Windows上读取性能数据计数器是否需要任何特殊的安全权限
- 使用本机windows API实现win32线程安全队列
- 如何使用 Windows 本机 Wifi 功能连接到请求网络安全密钥的 Wifi
- 是否有windows安全持久存储API
- 在Windows平台上创建进入网站安全区域的应用程序
- boost::posix_time::ptime存储在Windows共享内存映射中是否安全?
- Windows安全中心API
- Win32 windows线程安全吗?
- 如何在Windows Phone上使用c++/cx获得加密安全随机性
- 程序来检查我的wifi是否安全(即WPA2/WEP)在windows c++
- 剪切字符串的字符串安全方式(Windows内核)