0

こんにちは
、CreateFileMapping 関数で GetLastError 5 (アクセスが拒否されました) が発生しました。誰でも私を助けてください。以下の私のコード

typedef NTSTATUS(WINAPI *NtSetInformationFileNext)(HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID FileInformation,
                                                  ULONG Length, FILE_INFORMATION_CLASS FileInformationClass);
NtSetInformationFileNext Real_NtSetInformationFileData = NULL;
NtSetInformationFileNext Real_NtSetInformationFileVar ;

NTSTATUS WINAPI NtSetInformationFileCallback(HANDLE FileHandle, PIO_STATUS_BLOCK IoStatusBlock, PVOID FileInformation,
                                                  ULONG Length, FILE_INFORMATION_CLASS FileInformationClass)
{

if(FileInformationClass == 10)
{

    FILE_RENAME_INFORMATION *pInfo = (PFILE_RENAME_INFORMATION)FileInformation;

            GetFileNameFromHandle(FileHandle);

    MessageBoxW(NULL, pInfo->FileName, L"Renamed To", MB_OK);   
}

return Real_NtSetInformationFileData(FileHandle, IoStatusBlock, FileInformation, Length, FileInformationClass);
}

上記の NtSetInformationFile CallBack Function では、 FileHandle From NtSetInformationFile function を渡して GetFileNameFromHandle() 関数を呼び出しているため、 GetFileNameFromHandle Function 内で同じ Handle を使用して CreateFileMapping を呼び出しています。

上記のコードに何か問題がある場合は、私を助けてください。

4

1 に答える 1

0

[コメントであるはずの最初の答えを上書きする]

わかった。おそらく2つの問題のいずれかが発生します。1)このコードがデバイスドライバーのコンテキストで実行されている場合は、システム権限を持つシステムプロセスとして実行されている可能性があります。ユーザーのアクセス許可で実行されているアプリケーションからファイルハンドルが渡されましたか?これは、アクセスが拒否されたことを説明している可能性があります。

2)ファイルがFILE_SHARE_READおよび/またはFILE_SHARE_WRITEなしで開かれました。

于 2012-08-08T06:37:34.667 に答える