アクセス権のチェック方法について
あるフォルダ以下に、ユーザ毎にアクセス権が設定されたファイルがあり、指定したユーザが指定ファイルを読むことができるかをチェックするツールを作りたいと考えています。
APIを見ていて、LogonUser、ImpersonateLoggedOnUserを使ってチェックするユーザで偽装し、CreateFileでチェックするファイルを開けばよいかと思い、下記のようなコードを試しました。
-----
HANDLE hToken = NULL;
HANDLE hFile = NULL;
PTSTR pszUserName = "testuser";
PTSTR pszDomainName = "."
PTSTR pszPassword = "testuser";
PTSTR pszFilePath = "C:\\test\\dir01\\001.txt";
try {
{
if (!LogonUser(pszUserName, pszDomainName, pszPassword,
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken)) {
printf("error:%d\n",GetLastError());
goto leave;
}
hFile = CreateFile(pszFilePath,
GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING,
SECURITY_SQOS_PRESENT | SECURITY_EFFECTIVE_ONLY, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
printf("error2:%d\n",GetLastError());
} else {
printf("OK\n");
}
}
} leave:;
} catch(...) {}
-----
実行するとLogonUser、ImpersonateLoggedOnUserは成功しているようですが、セキュリティの有無にかかわらずすべてのファイルがCreateFileに成功してしまいます。
読み取り権限が無いファイルに対してはCreateFileは失敗すると思っていましたが違うのでしょうか?
それとも、セキュリティをチェックする方法として根本的に間違っています??
情報をお待ちしております。
環境は以下の通りです。
Win2000 SP4
VisualStudio6(VC++)
お礼
回答ありがとうございます。 参考URLを見ました。 VBそのものを終了させればよかったんですか! 今までずっとプログラムだけ終了させてデバッグしていたため、再起動しか方法がないと思い込んでいました。 ひとつ利口になりました。ありがとうございますた。