• 締切済み

windows2000とwindowsXP,2003で利用するWindowsAPIの差異

お世話になっております。 現在VisualStudio2005 C++、OSはWindowsXPで、Frameworkに依存しないプログラムを構築中です。 現在問題となっているのは、XP、2003Serverで正常に動作していたプログラムが、Windows2000ではランタイムエラーとなることです。 APIで利用しているものとしては、ファイルの読み取り、作成を行うCreateFile()が挙げられます。 その他にも、暗号化を行うプログラミング、 参考 http://www.trustss.co.jp/smnCrypt000.html ユーザー認証に関わるプログラミング といったことを行っておりますが、どの項目においても、 うまくいかない印象を持っています。 Windows2000では、上記のようなことを行う場合にXP,2003とは違う処理を実行しなければいけないのでしょうか? もし、ご存じの方がいらっしゃいましたらご教授お願い致します。

みんなの回答

  • chie65535
  • ベストアンサー率43% (8522/19371)
回答No.2

忘れてたのでもう1つ。 「2000とXPでの、API関数の挙動の差」は「DLLのバージョンの違い」が原因です(殆どのAPI関数はカーネルDLLによりサポートされています) 「2000にサービスパックを適用していけばXPに近づく」とは言っても、サービスパックを当ててもDLLの差異が縮まるとは限りません。 XPは2000の上位互換ですからDLL(API関数)も上位互換です。同じAPI関数でも「上位OSのXPのみにしかない機能を使った」とか「XPでしかサポートされないパラメータを与えた」とかがあると、2000でランタイムエラーが起きたりAPI関数の呼び出しに失敗するでしょう。 >ファイルの読み取り、作成を行うCreateFile()が挙げられます。 2000の場合「個人用フォルダ」以外のほぼすべてのファイルやフォルダは、一般の権限しかないデフォルト属性のユーザーにはアクセス権が与えられていません。 なので「個人用フォルダ以外は、ファイルが開けない」と思って間違いありません。「システムフォルダや他人のフォルダでのCreateFile()は常に失敗する」と思って下さい。

  • chie65535
  • ベストアンサー率43% (8522/19371)
回答No.1

基本的に、XPと2000は「そんなに変わらない筈」です。双方のOSのバージョン番号とビルド番号を見ると「殆ど同じOSである」事が判ります。 実際、2000に今までのサービスパックを全て適用すると「外見以外はXPと同等」になります。 ただ、決定的に違うのが「ユーザーアカウントのデフォルト属性」です。 XPを普通にインストールし、普通の手順で「1人目のユーザーアカウント」を作成すると、属性に「コンピュータの管理者と同等の権限が付与」されます。 しかし、2000の場合、普通の手順で作成したユーザーアカウントは「コンピュータの一般の使用者」になり、権限は大幅に制限されます。 その「ユーザーの権限の違い」は「実行したプログラムに出来る事、出来ない事」の違いとして現れます。ユーザーの権限は、そのまま「実行プログラムの権限」になりますからね。 つまり「XPで普通に呼び出せる筈のAPI関数が、2000では権限不足でランタイムエラーになる」と言う事です。 多分、2000で「別のユーザーアカウントで実行」するなどで「コンピュータの管理者」の権限があるユーザーでプログラムを実行すれば、ランタイムエラーが起きずに動いてしまうと思われます。 2000で「プログラム自身で権限を取得するか、権限のあるユーザーで実行しないと、殆どのAPI関数がエラーになって動かない」と言うのが不評で、XPになった時に「ユーザーにデフォで管理者権限を付けとく」と言う変更を行い「一部の例外を除き、プログラム自身で権限を取得せずとも、すでに管理者権限が付いているので、API関数がエラーにならないでちゃんと動く」ようにしました。 なお「デフォで管理者権限が付いてる」のが原因で、XPはウィルスの攻撃に対して弱くなってしまっています。何でもかんでも「管理者権限で動いちゃう」から仕方が無いのですが。 蛇足ですが「XPでも、管理者権限が無いユーザーで実行すれば、やはり、ランタイムエラーで止まる」のは同じです。なので「何がしかの権限が必要なAPI関数を呼ぶ時は、プログラム自身で必要な権限の取得を行う」のが本筋です。

tohboe
質問者

お礼

お礼が遅くなり申し訳ありません。 まさかそのような事情があったとは。。。 とても勉強になりました。 自分でも管理権限についてもう少し調べてみようと思います。 ご協力ありがとうございました。

関連するQ&A

  • WindowsXP

    新規に自作PC構築に伴いWindowsXP OEM版 を導入しようと思っております。 表示を見ると SP1とSP1aとあるのですが、この違いは何でしょう? それからXPは認証が必要とよく耳にするのですが、具体的にはどのような手続きをとるのでしょうか?よろしくお願いします。

  • Visual Studioに詳しい方、お願いします

    これからMicrosoft Visual Studio 2005、2008、2010の中で何かプログラミング言語を勉強しようかと思っています。そこで次の条件を満たしている言語があれば教えてください。 ・WindowsXP以降で動くGUIソフトを作ることができる ・実行ファイルのサイズが異様に大きくならない ・出来上がったプログラムを他人の環境(XP以降)で動かしてもらう際に、.NET Frameworkやランタイムのようなものを別途インストールしてもらわなくても良い 過去にVB6を少し使ったことがあるという程度の知識しかないため、習得難易度についても一緒にアドバイス頂けると有り難いです。宜しくお願いします。

  • WindowsXP(SP3)でWPA2-PSK

    WindowsXPでWPA2またはWPA2-PSKの暗号化を使用したいのですが、サーチするとWindowsXP(SP2)の場合には、更新パッケージKB893357を当てなければいけない、と出ていました。 現在XPは、SP3 になっていて 当てようとすると、 「このシステムのService Packが、適用しようとしている更新より新しいバージョンであることが検出されました。この更新をインストールする必要あありません。」 というメッセージボックスが出て、インストールできません。 結果的に、WPA2-PSKが、ワイヤレスネットワークのネットワーク認証のプルダウンに現われず、選択することができません。 SP3になっている状態から、WPA2-PSK の設定が出来るようにするには、どうすれば良いのでしょうか?

  • windows7からwindowsXPへのアクセス

    パソコン(ホームネットワーク構築)初心者です。 「windowsXP(2006年購入)」を放置しておくのがもったいないと思い、最近使用し始め、 主要のパソコンとしている「Windows7のノートパソコン」との間で ホームネットワークを構築して、 2者間でドキュメントの共有等を行おうと思っているところです。 そこで起こった問題が、 パスワードは間違っていないのに 『windows7からwindowsXPへのアクセス時、ログオンに失敗する』 というものでした。 他サイトで、「lan managerの認証方式」レベルが 昔のものと、現在のPCとでは設定しているレベルが異なることが原因だということだったので 解決策として、以下のことを試してみましたが、何度やってみても 「windowsセキュリティ」のウィンドウがでて、アクセスパスワードが間違っていると ログオン失敗のメッセージがでてきます。 ■■■解決策1)■■■ ・ポリシーの設定変更 →Windows7( Home premium )のため、ポリシーの設定自体がない ■■■解決策2)■■■ ・レジストリで設定の変更 "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa" にある LmCompatibilityLevel で、0~4を試す(再起動後アクセスを図る) ■■■解決策3)■■■ ・Buffalo提供の「ファイル共有セキュリティレベル変更ツール」をインストールする。 (再起動後アクセスを図る) ちなみに、以下のサイトを参照し、ワークグループを構築後、 ホームネットワークでファイル共有を設定することまでは 終えています。 →http://support.microsoft.com/kb/2485631/ja 結果、 共有フォルダへのアクセスは「windowsXP」からも「windows7」からもアクセスはできていますし、 「windowsXP」から、「windows7」へのアクセスはできていますが、 「windows7」から、「windowsXP」へのアクセスについては、ログオンに失敗し、アクセスできません。 以上のことから、質問したいことをまとめますと 1)「windows7」から、「windowsXP」へのアクセスは、  windows7(Home Premium)ではできないのか。 2)1)ができるとすれば、その対応策を教えてほしい。 長くなりましたが、回答をお待ちしています。

  • Windows Update と IE7のエラー

    XPです Windows Update(自動更新)で更新をインストールできませんでしたとエラーが出る (1)下記のような物が出ますなぜでしょう?再セットUPしてからです? Windows XP の ActiveX Killbits に対するセキュリティ更新プログラム (KB950760) Windows Media フォーマット ランタイム 9.5 を使用している Windows XP 用セキュリティ更新プログラム (KB923689) Microsoft .NET Framework, Version 2.0 用セキュリティ更新プログラム (KB928365) Windows XP 用セキュリティ更新プログラム (KB950762) Windows Media フォーマット ランタイム 9.5 および 11 を使用している Windows XP 用セキュリティ更新プログラム (KB941569) Microsoft .NET Framework, Version 1.1 Service Pack 1 用セキュリティ更新プログラム (KB928366) Windows XP 用の更新プログラム (KB942763) Security Update for CAPICOM (KB931906) Windows XP 用セキュリティ更新プログラム (KB951698) 悪意のあるソフトウェアの削除ツール - 2008 年 6 月 (KB890830) Windows XP 用 Internet Explorer 7 の累積的なセキュリティ更新プログラム (KB950759) Windows XP 用セキュリティ更新プログラム (KB951376) (2)IE7ですが 下記のような物が出ますなぜでしょう? すごく重たいし IE7のTOPの設定の変更をしても 変化が無く ツール→インターネットオプションの ホームページの現在のページを使用にしても IE7のTOPの設定を選択するがTOPページに なります スクリプトでエラー window.extemalはNull又はオブジェクトではありません http://runonce.msn.com/runonce2.aspx よろしくお願いします

  • WindowsXP sp3です。OUTLOOK EXPRESS(バージ

    WindowsXP sp3です。OUTLOOK EXPRESS(バージョン6.0)をメールで使っています。が、突然、'pop.XXXX.jpに接続(認証)中'から、いくら待っても進まなくなりました。『60秒間、応答しません。あと60秒待ちますか?』というメッセージがでます。今までこのようなことはなかったのですが、考えられるのは、2,3日前ランタイムエラーが、頻繁にでていたので、ネット(用語)検索し、Microsoftのサイトから、更新プログラムをインストールしたことが、原因かな?とも思っているのですが。対処法をご存知の方、宜しくお願いします。

  • Microsoft Update

    Microsoft Updateで更新プログラムをインストールすることができなくなりました。 下の更新プログラムをインストールしようとするとエラーが発生します。 エラーコードなどは表示されず、下のようなエラーが発生します。 次の更新プログラムはインストールされませんでした: Windows XP 用の更新プログラム (KB941776) Windows Media フォーマット ランタイム 9.5 および 11 を使用している Windows XP 用セキュリティ更新プログラム (KB941569) Microsoft .NET Framework, Version 2.0 用セキュリティ更新プログラム (KB928365) Microsoft .NET Framework 1.1 Service Pack 1 Windows XP 用 Internet Explorer 7 の累積的なセキュリティ更新プログラム (KB950759) 何故でしょうか?直前まではインストールできていました。 OS WindowsXP Pro SP3

  • 自作パソコンに他人のwindowsXPを入れてしまいました。

    大変恐縮なのですがお知恵を拝借させてください。 つい最近自作(店で構築)のパソコンを購入したのですがOSのみは自分で入れようと思いましてインストールの方を試みたのですが間違ってしまい(事情があったのですが)他人のwindowsXPを入れてしまいました。その為に認証確認の問題が発生してしまったので如何にかOSのアンインストール、フォーマットをしたいと思いましたが出来ず困っております。もともとあったwindows2000(こちらはもともと購入してあるもの)こちらをインストールするにもバージョンダウンだとインストールを受け付けなくこちらも対処が出来ませんでした。如何にか現在インストールしてあるXPを削除したいのですがどの様にすれば宜しいでしょうか?何卒お願い致します。

  • Windows Updateで一部インストールができません。

    Windows Updateで一部インストールができません。 Windows Updateを行っていたらインストールできない更新プログラムが出てきました。 今回のWindows Updateを行う前にWindows Updateを行い優先度の高いものは全て問題なくインストールできたのですが、その後でWindowsのシステムの復元を行い一回目のWindows Updateの前の状態に戻しました。 一回目の時にダウンロードしたファイルが残っているのでしょうか? 二回目のWindows updateでインストールできなかったものを下記に示します。 (1)Microsoft .NET Framework 3.5 用セキュリティ更新プログラム、Windows Server 2003 x86 および Windows XP x86 向け (KB982865) (2).NET Framework 3.5 用セキュリティ更新プログラム、Windows Server 2003 x86 および Windows XP x86 向け (KB983582) (3).NET Framework 3.5 用セキュリティ更新プログラム、Windows Server 2003 x86 および Windows XP x86 向け (KB2416468) (4).NET Version 2.0 ~ 3.5 用 Microsoft .NET Framework 3.5 Service Pack 1 および .NET Framework 3.5 ファミリ更新プログラム (KB951847) x86 OSは、WindowsXP Professinal Version 2002 Service Pack 3 です。

  • IPSecでの暗号化について

    WindowsXP Proを使用しています。 そこで、wwwサーバをたててインターネット上にHPを公開しながら特定の人にしか見れないようなシステムを構築したいと考えています。 そこで、方法についての相談です。 WWWサーバのみの公開で、さらに閲覧するユーザは数名であるため、VPNを構築するほどの必要性は感じません。 認証に関しては、最悪HP上でのID、パスワード認証のみでよいとして、インターネット上で生のデータをやり取りするのはさすがに問題があります。 そこで、暗号化を行いたいと考えています。 実験的なものであり、コストはあまりかけれません。 WindowsXPなので、IPSecで通信を暗号化する方法を調べているのですがよくわからず困っています。 どなたか詳しい方、教えていただきたいのですが。 また、IPSecをこのように使用するというのは正しいのでしょうか?

専門家に質問してみよう