私はWindowsドライバーを試していて、Microsoftのドライバーコードの例(正確にはMinispy)で作業しています。残念ながら、私はC++や特にドライバー開発の新人です。WDK:PVCHIDをPWCHARにキャストする(CからC++への変換)
CHAR buffer[1024];
PINSTANCE_FULL_INFORMATION data = (PINSTANCE_FULL_INFORMATION)buffer;
hResult = FilterVolumeInstanceFindFirst(VolumeName,
InstanceFullInformation,
data,
sizeof(buffer) - sizeof(WCHAR),
&bytesReturned,
&volumeIterator);
PWCHAR filtername = PVOID(PUCHAR(data) + data->FilterNameBufferOffset);
filtername[data->FilterNameLength/sizeof(WCHAR)] = L'\0';
if (_wcsicmp(filtername, MINISPY_NAME) == 0) { ...
このコードの一部は、C2440コンパイラエラーを提供します:(ほとんどの部分は今では非常にうまく機能する)C++にCからユーザーモードアプリケーションを翻訳しながら
は、私が面白いキャストに遭遇することはできませんPVOIDからPWCHARに変換する:
filtername = PVOID(PUCHAR(data) + data->FilterNameBufferOffset);
コードはCで完璧にうまくいきましたが、C++はPWCHARにそのボイドポインタ「アレイ」を投影しません。
私は数時間試しましたが、うまく動作しませんでした。何か案は?
多くの感謝!参考のため
:
PINSTANCE_FULL_INFORMATION構造体:
https://msdn.microsoft.com/de-de/library/ff548185(v=vs.85).aspx
コンパイラエラーC2440:
https://msdn.microsoft.com/en-us/library/sy5tsf8z.aspx
もちろん、 'PVOID'は* C++ *の' PWCHAR'変数に代入することはできません。 'PWCHAR filtername =(PWCHAR)(PUCHAR(data)+ data-> FilterNameBufferOffset);'(PWSTR)RtlOffsetToPointer(data、data-> FilterNameBufferOffset) ' – RbMm