C プログラミング言語の拡張機能として作成された高レベルの汎用プログラミング言語。低レベルのメモリ操作機能に加えて、オブジェクト指向、汎用、関数型の機能を備えています。
その問題はあなたのテスト環境で再現するものですか?それとも別のユーザーの環境でのみ発生するものですか?
問題の発生した環境にVC6でコンパイルしたバイナリ(以下A)とVS2017でコンパイルしたバイナリ(以下B)の両方をためすと(B)でのみ発生しているのですか?
それとも単純に(B)をリリースした以降に問題が発生するようになっただけですか?
NtUserGetMessageは公開されていないWindowsの内部APIだがGetMessageから呼び出される。 おそらくアプリケーションはGetMessageでメッセージキューから取り出そうとしているが、GetMessageはメッセージがキューに無ければメッセージが追加されるまでブロックされるので、そこで止まっただけの可能性。なのでNtUserGetMessagが問題なのではなく、メッセージが送られてこなくなったことを調べる必要があるでしょう。
とりあえずGetMessageを使わずに、MsgWaitForMultipleObjectsとPeekMessageを組み合わせて、同時にSetTimerをMsgWaitForMultipleObjectsよりも短い周期で動かす。
WM_TIMERすら届かないならメッセージが止まっているので、MsgWaitForMultipleObjectsタイムアウトしたらシステムの状態をログにとって見るぐらい。。
"tvnserver"とは何ですか?
tvnserverというのがTightVNCだと仮定すると、TightVNCであることを利用者が認識していない場合、その環境はリモートから侵入されています。
TightVNCであることを利用者が認識している場合、VNCを通じてリモートでそのデスクトップ環境を操作していると推定。
VNCの通信が切れる->デスクトップセッションが止まる->ユーザーセッションが止まる->デスクトップメッセージがなくなる->メッセージキューに何も送られてこなくなる->アプリがとまったように見える。
VNCサーバーがマウスやキーボードやIMEの状態を監視およびクライアントからの入力を挿入するのにSetWindowsHookExなどでフックをしている場合に、そのフックが正しく動作しなくなるとメッセージがアプリケーションに届かなくなりフリーズしたようになる。
VNCがAttachThreadInputでアプリケーションに入力を挿入しようとしているときにVNCが止まるとフリーズしたような状態になる(入力以外のたとえばタイマーとかは届く)。