我正在为Windows开发内核驱动程序,最近我决定从C过渡到C/C++。在代码转换过程中,我遇到了一个无法解决的警告。基本上,我有一个特定代码行的函数:
OB_PREOP_CALLBACK_STATUS
OCPreOperationCallback(
_In_ PVOID RegistrationContext,
_Inout_ POB_PRE_OPERATION_INFORMATION OperationInformation
)
{
// ...
auto test = IoThreadToProcess(static_cast<PETHREAD>(OperationInformation->Object));
// ...
}
该行高亮显示错误消息,如下所示:
警告C26486不要将可能无效的指针传递给函数。对"IoThreadToProcess"的调用中的参数0"(*OperationInformation(.Object"可能无效(生存期.3(。
警告似乎很清楚:我需要确保作为参数传递的指针是有效的。尽管如此,我还是找不到任何方法来检查无效状态。我试着添加:
if(OperationInformation != nullptr && OperationInformation->Object != nullptr)
在分配之前,但警告仍然存在。
关于这个问题,我错过了什么吗?
PETHREAD pThread = static_cast<PETHREAD>(OperationInformation->Object);
if(pThread != nullptr) //or 'pThread != NULL' or 'pThread'
{
auto test = IoThreadToProcess(pThread);
}