1. IN and OUT are usually define as nothing:
#define IN
#define OUT
(there is no keyword in C that distinguishes input and output parameters).
2. Try adding /P to your compiler command line ("Generate Preprocessed File" option in Visual Studio Properties page under C/C++, Preprocessor".)
That will save the preprocessor output to a separate file which you can then inspect to see what preprocessor definitions are being used.
(I suspect NTSTATUS is somehow defined as 'i' -- that's the most likely way you would get that error message.)
3. There shouldn't be a problem with compiling C code with the C++ compiler and using it for a kernel mode driver. You won't get in trouble using C++ if you are basically just writing C. You might get into trouble if you are using "advanced" features of C++ that aren't C and don't understand how the compiler is implementing those features. But you can cause the same problems using C if you want to (it's just that when you write the same thing in C it looks so complex that you know it's probably bad news.) See:
http://msdn.microsoft.com/en-us/windows/hardware/gg487420[
^]
However, I wouldn't just switch from C to CPP without understanding what the problem is. When problems just magically go away they have a habit of coming back and biting you later...