タグ

win32apiに関するyzxのブックマーク (15)

  • MAX_PATH を超えた場合の挙動 - Cube Lilac

    Win32 API (のファイル操作系)を叩く際に気になるものとして MAX_PATH の存在があります.例えば,MoveFile などの関数においても指定されたパスの長さが MAX_PATH (256 文字?) を超えると失敗します.ただ,この制限はパスの頭に "\\?\" と言う文字列を追加すると緩和されるそうです. Windows NT/2000:この関数の ANSI 版では、名前は最大 MAX_PATH 文字に制限されています。この制限をほぼ 32,000 ワイド文字へ拡張するには、この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加してください。詳細については、MSDN ライブラリの「」(ファイル名の規則)を参照してください。 MoveFileEx 関数 - MSDN このオプションが気になったので,実際に接頭辞を付加して実行してみた結果が以下の

    MAX_PATH を超えた場合の挙動 - Cube Lilac
  • ゲームのタイミングとマルチコア プロセッサ

    XNA デベロッパー コネクション (XDC)、ソフトウェア デザイン エンジニア Chuck Walbourn 著 2005 年 12 月 はじめに 最近のコンピューターで電源管理技術の普及が進んでいることにより、高精度の CPU タイミングを取得するための一般的な方法であった RDTSC 命令が、予期したとおりに機能しない場合があります。ここでは、Windows API の QueryPerformanceCounter と QueryPerformanceFrequency を使用した、より正確で確実な解決策を示します。 背景 x86 P5 命令セットの導入以降、多くのゲーム開発者が高精度タイミングを実行するために Read Time Stamp Counter (タイム スタンプ カウンターの読み取り) つまり RDTSC 命令を使用してきました。Windows マルチメディア タ

    ゲームのタイミングとマルチコア プロセッサ
  • Game Timing and Multicore Processors - Win32 apps

    With power management technologies becoming more commonplace in today's computers, a commonly-used method to obtain high-resolution CPU timings, the RDTSC instruction, may no longer work as expected. This article suggests a more accurate, reliable solution to obtain high-resolution CPU timings by using the Windows APIs QueryPerformanceCounter and QueryPerformanceFrequency. Background Recommendatio

    Game Timing and Multicore Processors - Win32 apps
    yzx
    yzx 2012/03/18
    QueryPerformanceCounter and QueryPerformanceFrequency
  • Develop/Timer - SyncHack

    Windows の Timer について † 結論:正確な時間計測には QueryPerformanceCounter(), QueryPerformanceFrequency() を使いなさいってこった。 High Performance Timing under Windows (http://www.devsource.com/ ) 元ネタ。 GetTickCount()、SetTimer() + WM_TIMER † Windows はリアルタイム性を強く求めていないので、Timer としての精度は悪い。 WM_TIMER の優先順位はかなり低く、他のプロセスに CPU パワーの優先順位が高く割り当てられている等の場合、100ms 程度の制度しか期待できない。システム全体のパフォーマンスの均一化によるパフォーマンスの向上を考えると一概に悪い仕様とは言えないだろう。 逆に 100ms

  • DLL injection - Wikipedia

    In computer programming, DLL injection is a technique used for running code within the address space of another process by forcing it to load a dynamic-link library.[1] DLL injection is often used by external programs to influence the behavior of another program in a way its authors did not anticipate or intend.[1][2][3] For example, the injected code could hook system function calls,[4][5] or rea

  • CreateProcessによるプログラム起動と制御

    CreateProcess()を使うと任意のプログラムをコマンドラインで、あるいは引数付で実行することができます。さらに、実行開始時の状態を指定したり実行したプロセスやプロセスのメインスレッドのハンドルも得られるので、プログラムの終了を待つなど柔軟な制御ができそうですね。 適当なエディタ機能とCreateProcess()を組み合わせれば、「編集したソースをコマンドラインでコンパイラに渡してコンパイル、コンパイル終了を待って実行」という簡単な「統合開発環境」を開発することもできるでしょう。 今回は、そうした他のプログラムとの連携を意識しCreateProcess()で任意のコマンドラインを指定してプログラムを実行し、そのプログラムの終了を検知してみることにします。 CreateProcessによる制御 まず、CreateProcess()でプログラムを起動してみましょう。CreatePro

  • この例外を投げたのは誰だー スタックトレースで遊ぼう - お前の血は何色だ!! 4

    まぁ、不慮の例外といいますか、突然飛んでくる例外というのはいろいろあるわけで。 そりゃ、例外なんて名前がついているから、例外的に突然飛んでくるのは当たり前だろうとこともありますね。 では、この例外をだれが投げたかを C++ で追跡することはできるのでしょうか。 _ □□    _      ___、、、 //_   [][]//   ,,-―''':::::::::::::::ヽヾヽ':::::/、  誰  投   こ //  \\  //  /::::::::::::::::::::::::::::::i l | l i:::::::ミ  だ   げ   の  ̄      ̄   ̄/ /:::::::::,,,-‐,/i/`''' ̄ ̄ ̄ `i::;|  あ  た   例 ―`―--^--、__   /:::::::::=ソ   / ヽ、 /   ,,|/   っ  の   外 /f ),f

    この例外を投げたのは誰だー スタックトレースで遊ぼう - お前の血は何色だ!! 4
  • N-Soft 雑記場所 WinInetでHTTPSつまりSSL接続

    WinInetはHTTP,FTP,今は殆ど使われてないであろうGopherなんかのプロトコルを、ソケットを意識しないで使えるように準備されたAPI。 自由度は高くないけど、HTTPで言えばGETやPOSTでファイルを受信するような手続き的な処理はエラー処理を考えないと数行で記述できるので個人的には多用している。ちなみに、CHttpConnectionとかCFtpConnectionとかWinInetAPIをラップしたクラスもある(使ったこと無し)。 で、お手軽といっても実際はそう簡単でもない。 WinInetではない通常のSocketプログラミングは煩雑ではあるけど、具体的に何を処理しているかプログラマは把握しやすいので、細やかに制御ができる。しかしWinInetを使う場合は、APIの背後でどういった処理をしているのかはブラックボックスに近いので、前処理や後処理などに一定の手順があり、い

  • ファイルとフォルダのパス

    // // WIN32API: 主要なフォルダのパスを求める // SHGetSpecialFolderLocation() // #include <windows.h> #include <shlobj.h> int WINAPI WinMain (HINSTANCE, HINSTANCE, PSTR, int) { TCHAR sBuff[1024 * 64]; char Path[MAX_PATH]; LPITEMIDLIST PidList; int fnFolder[] = { //CSIDL_FLAG_CREATE, //CSIDL_ADMINTOOLS, CSIDL_ALTSTARTUP, CSIDL_APPDATA, CSIDL_BITBUCKET, //CSIDL_CDBURN_AREA, //CSIDL_COMMON_ADMINT

    yzx
    yzx 2009/02/04
  • DllMainとデッドロックで和訳の練習 - やや温め納豆

    URL, Win32 | 00:31 | DllMainでCreateThreadは動作するでコメントをいただいたAnother reason not to do anything scary in your DllMain: Inadvertent deadlockを使って和訳の練習。 DllMainでおこり得るデッドロックの例について。訳はのっけから怪しい感じだ。その辺の論文より訳し辛いのは文章が自然な形に崩れているからだろう。 あなたのDllMainで怖いことをなにもしないもうひとつの理由:不慮のデッドロックあなたのDllMain関数はローダーロックの内部で実行し、わずかな時間のひとつ、内部ロックのひとつが待つ間、OSはあなたにコードの実行を許可する。これはあなたが、あなたのDllMainにおいてロック階層に違反することがないよう特別な用心をしなければならないことを意味する。もしそう

  • リモートプロセスのコマンドラインパラメータを取得する - espresso3389の日記

    自分のプロセスのコマンドラインを取得するのは非常に簡単だ。main関数が存在するならargc, argvで取得できるし、そうでなければ、__argv, __argv, (__wargv/__targv)で取得することもできる。また、APIとしては、GetCommandLineというものもある。好んで使う理由は見あたらないけど。 しかしながら、リモートプロセスのコマンドラインとなると、とたんに敷居が高くなる。プロセスハンドルを持っていても、GetRemoteCommandLineというAPIは見あたらないのでどうしようもない。となると、考えられる方法としては、 CreateRemoteThreadなどで相手プロセス内でGetCommandLineを呼び出す 相手のプロセスのメモリを直接読み込む という2つのうちのいずれかを選択することになる。一つ目の案は、大げさすぎるのと、相手プロセスに送り

    リモートプロセスのコマンドラインパラメータを取得する - espresso3389の日記
    yzx
    yzx 2009/01/26
  • バイナリエディタの作成

    ページは、私がバイナリエディタを作成する際に使用した技術を 紹介することを目的としています。 紹介する技術は、必ずしもこれでないと実現できないというわけではありません。 方法は他にもたくさんあると思います。 バイナリエディタには、最低限、以下の機能が必要です。 ・ファイルを開き、データをリードする。 ・ファイルを開き、データをライトする。 ・リードデータを、16進表示する。 ・16進データを、バイナリデータに変換する。 ・'0'〜'9'、'A'〜'F'までの文字以外の入力を制限する。 ・1画面に収まらないデータ量の場合は、画面をスクロールさせる。 では、2.の機能を実現する為に必要な技術とは何でしょう? ただ単にエディットボックスへ入力されたキーを、16進表示で2桁ずつ 表示するだけじゃないか〜、と言われるかもしませんが、これが結構大変なんです。 まず、キー入力制限。これは、WM_KEY

    yzx
    yzx 2009/01/25
  • Security in Real Estate Property – Property Management

    If you have managed to flip on the TV lately, you have probably seen at least a dozen distinct insurance advertisements all competing for your company. Knowing which you can select through all of the flash and pizzazz may be somewhat difficult. Have a look at these homeowners’ insurance strategies for some fantastic advice. Perfect Ten condominium sits on 104.5 sq ft or 9.7 sq. m and a gross plot

  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • Shell_NotifyIcon

    Version 5.00 以降: pnid パラメータで指定される NOTIFYICONDATA 構造体の uVersion メンバで指定されるバージョンに従って振舞うようにタスクバーに指定します。このメンバのデフォルト値は 0 であり、原型の Windows 95 の通知アイコンにおける振舞いになります。 pnid 必要な情報を格納した NOTIFYICONDATA 構造体のアドレスを指定します。構造体の内容は dwMessage パラメータに依存します。 戻り値 関数が成功すると 1 (TRUE) が返ります。それ以外の場合には 0 (FALSE) が返ります。 dwMessage パラメータに NIM_SETVERSION を指定した場合には、バージョンがうまく変更されると 1 (TRUE) が返ります。指定されたバージョンがサポートされていない場合には 0 (FALSE)

    yzx
    yzx 2009/01/12
  • 1