プロが教える店舗&オフィスのセキュリティ対策術

Windows7でC++にて、PCにTelnetクライアントがインストールされているか確認したいです。
そこで_access_sを使ってみたのですが、どうにも思ったように動いてくれません。

//コード例
void func(void){
cout << _access_s("C:\\Windows\\System32\\telnet.exe",0) <<endl; //←存在しているにもかかわらず、2が返ってきます。
cout << _access_s("D:\\test\\new.txt",0) <<endl; //自分で作成したテキストファイルです。意図した通り0が返ってきます。
}

システムフォルダのアクセス権限の問題なのだろうか・・・とも思ったのですが、解決方法が思いつきませんでした。
解決方法をご存じの方がいらっしゃいましたら、ご教示願います。
よろしくお願いいたします。

A 回答 (3件)

#1です。


当方でもtelnet.exeをwindows7にインストールし、テストプログラムを実行してみました。
結果は質問者様と同様でした。(_access_sでは認識しないが、dirコマンドでは表示される)
従って、telnet.exeのみ特殊な仕掛けが施されていると思われます。
しかしながら、プログラムからtelnet.exeを認識する方法はわかりませんでした。
当方で、更に以下の内容を試みましたが、何れもtelnet.exeを認識出来ませんでした。
1.stat関数で、存在を確認。=>認識しない。
2.system関数で"dir c:\\windows\\system32\\telnet.exe"を実行
ファイルが存在しない ・・・・と表示される。
コマンドプロンプトでの直打ちでは、表示されるが、system関数からのdir呼び出しでは表示されず。
3.system関数で"where telnet.exe"を実行
与えられたパターンのファイルが見つかりませんでした。・・・が表示される。
コマンドプロンプトでの直打ちでは、表示されるが、system関数からのwhere呼び出しでは表示されず。
----------------------------------------------------------------
お役に立てず申し訳ありませんでした。引き続き他の回答者からの回答をお待ちください。

この回答への補足

再度複数の方法で検証して下さったこちらのご回答をBAとさせていただきます。お二方ともありがとうございました。勉強になりました。

補足日時:2013/11/24 07:42
    • good
    • 0
この回答へのお礼

いえいえとんでもございません。再度実験して下さりありがとうございます。私の環境以外でもこのエラー(?)の再現するようなので、telnet.exeが特殊なのでしょうね。引き続き情報を探してみることにします。ありがとうございました。

お礼日時:2013/11/22 02:31

違うことやってて気付いたのですが


「VirtualStore」
が原因ではないでしょうか
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。そういえばそんな機能もありましたね!
ただVirtualStore内にtelnet.exeはなく、access関数と共に検索してみましたが有力な情報は得られませんでした。「ならばレジストリの有無をチェックすれば」とも思いましたが、よく考えればそこまでtelnet機能が必要ないなと思いまして、諦めることにしました。しかしVirtualStoreの問題を思い出せたのはよかったです。今後注意しようと思います。ありがとうございました。

お礼日時:2013/11/24 07:41

本当にc:\windows\system32内にtelnet.exeが存在しますか。


当方で、実行したところ、存在するexeについては、0が返ります。
以下ソースコードと実行結果です。
----------------------------
cout << _access_s("C:\\Windows\\System32\\telnet.exe",0) <<endl;
cout << _access_s("C:\\Windows\\System32\\ftp.exe",0) <<endl;
-----------------------------
実行結果
2
0
-----------------------------
当方の環境では、
telnet.exeは存在しない
ftp.exeは存在する
状態で実行しています。
------------------------------
C:\Windows\System32>dir ftp.exe
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 05C2-7500 です

C:\Windows\System32 のディレクトリ

2010/11/20 21:17 42,496 ftp.exe
1 個のファイル 42,496 バイト
0 個のディレクトリ 824,174,346,240 バイトの空き領域

C:\Windows\System32>dir telnet.exe
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は 05C2-7500 です

C:\Windows\System32 のディレクトリ

ファイルが見つかりません
----------------------------------------------
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。再度試してみました。

----------------------------
//コード
cout << _access_s("C:\\Windows\\System32\\telnet.exe",0) <<endl;
cout << _access_s("C:\\Windows\\System32\\ftp.exe",0) <<endl;
----------------------------
//実行結果
2
0
----------------------------
//cmd dir
C:\Windows\System32>dir telnet.exe
C:\Windows\System32 のディレクトリ
2009/07/14 10:39 79,872 telnet.exe
1 個のファイル 79,872 バイト
0 個のディレクトリ 77,227,819,008 バイトの空き領域

C:\Windows\System32>dir ftp.exe
C:\Windows\System32 のディレクトリ
2010/11/20 05:24 48,128 ftp.exe
1 個のファイル 48,128 バイト
0 個のディレクトリ 77,227,819,008 バイトの空き領域
----------------------------

こうなりました。telnet.exeもftp.exeも同様に「読み取りと実行」に許可がなされているのですが、ますますわからなくなってしまいました・・・

お礼日時:2013/11/20 01:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!