グループポリシーエラー このコンピュータのグループポリシーオブジェクトを開くことができませんでした。

gpedit.mscを開くと以下のようなエラーが出る。

グループポリシー エラー

グループポリシーの設定ファイルが壊れているとこのエラーがでるようだ。

設定ファイルの初期化

フォルダ C:\Windows\System32\GroupPolicy\Machine をリネームすると次回起動時にまた作られる。C:\Windows\System32\GroupPolicyは隠しファイルになっているので、エクスプローラーで隠し属性ファイルも表示するようにする。

エクスプローラーで隠し属性ファイル表示

C:\Windows\System32\GroupPolicy\Machineをリネーム

Windowsのコマンド引数でのダブルクオート

コマンドプロンプトでコマンド(アプリ)を引数付きで起動したとき、引数のダブルクオートがどう解釈されるかの実験

通常(ダブルクオートなし)

スペースなしの文字列をダブルクオート

ダブルクオートで囲ってもプログラム内では現れない。(mainのargvの話)

スペースありの文字列をダブルクオート

ダブルクオートで囲むと1つの引数として扱われる

スペースなしの文字列をシングルクオート

シングルクォートはダブルクオートとは違い引数に現れる。Windowsではシングルクォートは特別な文字列ではないようだ。

スペースありの文字列をシングルクオート

シングルクォートは特別な文字でないことがわかる。

ではプログラム内でダブルクオート文字列、例えば“abc”を受け取りたい場合はどうしたらいいだろうか。結論から言うと3つのダブルクオートでabcを囲めばいい。

3つのダブルクオートは以下のように解釈される。

  1. 開始ダブルクオート
  2. 終了ダブルクオート
  3. 終了ダブルクオート直後のダブルクオートは通常文字として扱われるダブルクオート

あるいは2つのダブルクオートで1つのダブルクオートと解釈される。
この形式はCランタイムとWin32APIのCommandLineToArgvWで扱い方が違うようなので、以下の場合には使えない。

プログラム内でabc=”xyz = 123″を受け取りたい場合。

\でエスケープできる。

引数を表示するアプリ

引数を解釈して表示してくれるアプリ、開発のときの確認用。あるいは長い引数をとるアプリのときプログラム内部でどう受け取られるかの確認用。CRTとCommandLineToArgvWと独自実装で表示する。

https://github.com/ambiesoft/argCheck/releases

グループポリシーエディターが起動しなくなったのを直す

現象

直し方

エクスプローラーで、C:\Windows\System32\GroupPolicyを開く。このフォルダは隠しフォルダになっているので、「表示」メニューから隠しファイルを表示するオプションを有効にするか、アドレスバーに直接入力する。

このフォルダの中にある、MachineMachine.oldにリネームする。

Windows10で共有フォルダにゲストアクセスする

共有元(Windows10)の設定

WindowsXPからもアクセスする

Windowsの機能のインストールで、SMB1.0を有効にする。
[WIN]+Rで実行ダイアログを表示し、appwiz.cplと入力し、Windowsの機能からSMB1.0をインストール。

ゲストアカウントを有効にしてリモート接続を許可する

[WIN]+Rで実行ダイアログを表示し、secpol.mscと入力し、Local Policies => User Rights Assignment => Deny access to this computer from the networkからGuestを削除する。

続いて、Local Policies => Security Options => Accounts: Guest account statusでゲストアカウントを有効にする。

wchar_tとchar16_t

char

C言語の最初のキャラクタータイプ。1バイト。ASCIIやISO-8859に使う。UTF8やShiftJISなどでも使う。Windowsの場合は通常マルチバイト文字と呼ばれるシステムの言語設定を反映した各国で異なる文字列になる。日本語のWindowsではShiftJISが入る。しかし今ではWindowsでは通常wchar_tを使いcharは使わない。Linuxでは通常UTF8を使うのでcharにはUTF8が入る。

wchar_t

次にできたキャラクタータイプ。サイズは実装依存。Windowsでは2バイト、Linuxでは4バイトになるので注意。何が入っているかも実装依存。WindowsではUTF16-LE。Linuxでは通常使用しないが、多分UTF32-LEが入っている。エンディアンはCPU依存と思われる。

char16_t, char32_t

2バイトと4バイトのキャラクタータイプ。何が入るかは実装依存。

リテラル

リテラルを表すには文字列の前に1~2文字の記号をつける。

標準ライブラリの文字列型

基本的にはbasic_stringなので、これに文字型を渡して
typedefしている。

標準入出力

string用のcoutとwstring用のwcout以外は定義されていないようだ。

Windowsのchar16_t

Windowsではwchar_tchar16_tはともに2バイトなのでキャストできるのだろう。

参考:実装ごとのサイズ

wchar_tのサイズがWindowsとLinuxで違う。

SAMとは

Windowsにおいて、ユーザとグループの設定はレジストリのHKLM\SAM以下に書かれる。でもレジストリから見れない。セキュリティオプションもここにかかれることがあるようだが同上。

SAMはSecurity Account Managerでアカウント情報管理
システムアカウントじゃないと見れない

clipshot 8-3-2015 5-53-17 PM

Systemアカウントでしかアクセスできない。ちなみにファイルはC:\Windows\System32\config\SAMと思われる。

で見れる
このツールはローカルにサーバPSEXESVC.exeを立ち上げてそこから実行する