0

CreateFile関数へのパス パラメータが対象である場合\Windows\System32\、呼び出しが次のエラー コードで失敗していることに気付きましたERROR_PATH_NOT_FOUND

ファイル パスは正しいです。私はフォルダーの所有者です。問題は、なぜ呼び出しが失敗するのかということです。MS は、フォルダへのアクセスを禁止する特別なポリシーを追加しましたか?

サンプルコード:

TCHAR szFile[MAX_PATH];
PathCombine(szFile, g_szSystemDirectory, "settings.ini");

HANDLE hFile = CreateFile(szFile,
                          GENERIC_READ,
                          0,
                          NULL,
                          OPEN_EXISTING,
                          0,
                          NULL);

if (hFile == INVALID_HANDLE_VALUE)
{
    printf("INVALID FILE: %i", GetLastError());
    return FALSE;
}
4

4 に答える 4

2

Windows XP を使用すると、管理者/標準アカウントの両方で、デバイス ハンドルを取得するための管理者権限は必要ありません。

これは、Vista、Windows 7 (UAC) では変更されており、デバイス ハンドルを取得するには管理者権限が必要です。

いくつかの解決策は次のとおりです。

  1. サービスを利用する
  2. COM 昇格モニカを使用する
  3. マニフェストを使用

注: デバイスから統計情報を照会するだけでよい場合は、管理者権限は必要ありません。を使用する場合は、 dwDesiredAccessパラメータCreateFile()にゼロ (0) を指定します。

于 2011-12-21T11:01:42.620 に答える
2

64 ビット OS で実行されている 32 ビット アプリの場合、CreateFile を呼び出す前に Wow64DisableWow64FsRedirection() を呼び出すと、「C:\Windows\Syswow64」ではなく「C:\Windows\System32」から読み取られます。あなたに何が起こっているのか。

于 2010-01-14T20:49:22.650 に答える
0

あなたのプログラムはおそらく管理者として実行する必要があります。管理者であっても、権限を昇格する必要があります。プログラムの実行時に右クリックして [管理者として実行] をクリックするか、プロパティを編集して [常に管理者として実行] を選択します。

于 2009-05-20T01:17:00.633 に答える