Warning C28164

The argument is being passed to a function that expects a pointer to an object (not a pointer to a pointer)

This warning is reported when a pointer to a pointer is used in a call to a function that is expecting a pointer to an object.

The function takes a PVOID in this position. Usually, it indicates that &pXXX was used when pXXX is required.

Some polymorphic functions (functions that can evaluate to, and be applied to, values of different types) are implemented in C by using a PVOID argument that takes any pointer type. However, this allows the programmer to code a pointer to a pointer without causing a compiler error, even when this type isn't appropriate.

Example

The following code example generates this warning:

PFAST_MUTEX pFm;
//...
KeWaitForSingleObject(&pFm, UserRequest, UserMode, false, NULL);

The following code example avoids the warning:

PFAST_MUTEX pFm;
//...
KeWaitForSingleObject(pFm, UserRequest, UserMode, false, NULL);