2012年08月10日

Windows7で新規ユーザーが作成できない件(User Profile Service)

前回の記事でWindows7でのGuestアカウントについて書きました。

実は検証のため、別のWin7機でも同様の作業を行ったんですが、こちらではどうしてもGuestアカウントが作成されませんでした。
Adminでログオン、コントロールパネルのユーザーアカウントからGuestを有効にして再起動、ようこそ画面でGuestを選択してログオンしようとしても、以下の文言が表示されてログオンできません。

User Profile Serviceサービスによるログオンの処理に失敗しました。 ユーザープロファイルを読み込めません。

それでは、と、Guestではなく新規ユーザーを作成してみても、同様のエラーでログオンできません。
この現象自体、割としばしば発生するようで、ネット上にもさまざまな解決方法が紹介されていますが、どれも何となく決定的なものではない感じです。こちらでも以下のすべてを実行しましたが、まったく解決しませんでした。

・レジストリエディタからユーザープロファイルを修復・・・そもそもユーザーが作成できないので、修復するべきプロファイルは存在しません。
・セーフモードでGuestを有効化・・・ログオンできない。
・UACの設定を「通知しない」に変更・・・ログオンできない。
・C:\usersフォルダのアクセス権設定・・・正常なPCと見比べてみたが問題なし。
・chkdsk実行・・・変わらず。

しばらく悩んで、イベントログを見てみました。

1.コンピューターを右クリック→管理をクリック
2.左ペイン「イベントビューアー」→「Windowsログ」→「アプリケーション」 と展開
3.時刻からGuestでログオン試行の際のエラーを特定

すると、Guestログオン試行時に必ず、イベントソース:user profile general のエラーが発生していることを確認しました。

ファイル \\?\C:\Users\Default\AppData\Roaming\Microsoft\IMJP12\imjp12cu.dic\\?\C:\Users\TEMP\AppData\Roaming\Microsoft\IMJP12\imjp12cu.dic にコピーできません。ネットワークの問題が発生しているか、セキュリティの権限が不足していることが原因と考えられます。

詳細 - アクセスが拒否されました。

ファイル \\?\C:\Users\Default\AppData\Local\Microsoft\IME12\\\?\C:\Users\Guest\AppData\Local\Microsoft\IME12\ にコピーできません。ネットワークの問題が発生しているか、セキュリティの権限が不足していることが原因と考えられます。

詳細 - アクセスが拒否されました。

そこで、Adminでログオンし、C:\Users\Default フォルダ内の該当ファイル・フォルダをエクスプローラーで見てみることにしました(C:\Users\Default フォルダが見えない場合はフォルダーオプションで隠しファイルを表示に変更してください)。

すると、C:\Users\TEMP\AppData\Roaming\Microsoft\IMJP12\imjp12cu.dic ファイルと C:\Users\Default\AppData\Local\Microsoft\IME12 フォルダのアイコンに鍵がかかっています。
プロパティのセキュリティタブを開くと、AdministratorとAdministratorsにフルコントロールの権限が付与されています。
これらのファイル・フォルダは、正常にGuestアカウントが有効になったPCには存在していません。
そこで、IME12 フォルダと IMJP12 フォルダをAdminのデスクトップに移動、ログオフしてGuestでのログオンを試したところ、ついにプロファイルの読み込みが開始され、デスクトップにアクセスすることができました。

今回分かったことは、Windows7では、新規ユーザーが作成される際には、C:\Users\Default フォルダ以下を新規ユーザーのフォルダとしてコピーする、ということです。
コピー元のDefaultフォルダの中に、特殊なアクセス権が付与されたファイル・フォルダが存在したために、新規ユーザー向けのフォルダの作成が拒否され、今回の現象が発生した、と分かりました。

それではこのファイル・フォルダは何なのか、ということですが、どうもIMEのユーザー辞書に関連するもののようです。これがなぜDefaultフォルダ内にあるかについては不明ですが、これらの作成日を見ると大量のWindows Updateが行われた日だったので、その時に何らかの理由で紛れ込んだのでは?と推測します。

Windows7で新規ユーザーが作成できない現象に見舞われている方は、一度イベントログに同様のログが吐き出されていないか確認してみてください。そして該当のファイル・フォルダをDefaultフォルダから退避させてから再度ログオンにチャレンジしてみてください。


posted by nambei-x at 15:52| Comment(10) | TrackBack(0) | PC・ネット関連 | このブログの読者になる | 更新情報をチェックする

2012年08月07日

Windows7でGuestアカウントからDドライブにアクセスできなくする

先日、施錠してある部屋から仕事用に貸与されているノートPCが紛失しました。
内部の人間が他愛もない理由で持ち出したもので、中のデータも無事だったので結果的には何事もなく済んだんですが、今後に備えて多少なりとも自衛手段を取っておくことにしました。

作りたい環境は、
・私自身の作業データは私以外の人間から完全に守ること。
・その上で、第三者にこのPC内のOffice等のソフトの使用を許すこと。
というものです(なかなか辛い立場です)。

ということで、現在使用中のユーザーアカウントはすべて新たなパスワードで保護した上でGuestアカウントを有効化し、今後無断使用するかもしれない第三者にはGuestでログインして操作していただこうと考えました。

さっそく既存のアカウントにパスワードを設定後、Adminでログイン、Guestアカウントを有効化しました。
Guestでログインして操作してみたところ、Dドライブにフルアクセスできることに気づきました。
Dドライブにもバックアップデータ等、それなりに重要なデータがありますので、Guestからは完全に隔離しておきたい。
以下はこちらが講じたその手順です。Admin権限で作業します。もちろんGuestは有効にしておきます。

1.コンピューター→ローカル ディスク(D:) を右クリック、プロパティを表示
2.「セキュリティ」タブをクリックして「編集(E)」ボタンをクリック
3.「ローカル ディスク(D:)のアクセス許可」ウィンドウ内「追加」ボタンをクリック
4.「ユーザーまたはグループの選択」ウィンドウ内「選択するオブジェクト名を入力してください」欄に
  「guest」と入力→「名前の確認」ボタンをクリック
5.入力欄が「コンピューター名\Guest」に変更されたら「OK」ボタンをクリック
6.「ローカル ディスク(D:)のアクセス許可」ウィンドウ内のユーザー「Guest」を選択状態→
  「Guestのアクセス許可(P)」欄の「フル コントロール」の「拒否」チェックボックスにチェック→
  「特殊なアクセス許可」以外のすべてが「拒否」になる

20120807_2304440.png


7.アクセス拒否の設定をするかどうかたずねるウィンドウが開くので「はい」を押す

20120807_2304441.png


8.ウィンドウが開き。設定変更が行われ、しばらくして自動終了すれば完了

GuestでログインしてDドライブをWクリックすると、下のように表示されます。

20120807_2304442.png


また右クリックしてプロパティを表示すると、下のようになります。

20120807_2304443.png


余談ですが、GuestではなくUsersに同様の制限をかけてみたところ、Adminを含むすべてのユーザーがアクセス拒否されました(笑)。AdministratorsはUsersに含まれるようです。

これで一応、GuestからDドライブは参照できなくなりました。
ただ、C:\Users内の各ユーザーのフォルダはすべて参照可、ファイル名も閲覧可(アクセスは不可)なので、まだ不安です。この辺をGuestから見えなくする方法があるか、もう少し要調査です。

8/10追記
GuestアカウントからC:\Usersフォルダの中身が見える件ですが、再起動してGuestでログインしたところ、特別な設定なしにAdminを含む他のユーザーのフォルダ内へのアクセスが禁止されていました。なのでとりあえず安心してよさそう?




posted by nambei-x at 22:08| Comment(0) | TrackBack(0) | PC・ネット関連 | このブログの読者になる | 更新情報をチェックする

2012年08月06日

次のファイルが存在しないかまたは壊れているため、Windowsを起動できませんでした: \Windows\SYSTEM32\CONFIG\SYSTEM

業務用のパソコン(WindowsXP)で、「黒い画面に意味不明なメッセージが表示され、起動できない」との相談を受けました。
見に行くと画面には以下の表示が。

次のファイルが存在しないかまたは壊れているため、Windowsを起動できませんでした:

\WINDOWS\SYSTEM32\CONFIG\SYSTEM

オリジナルセットアップCD-ROMからWindowsセットアップを起動して、このファイルを修復できます。
修復するには、最初の画面で' R 'キーを押してください。


黒い画面と聞いて「 Operating System not found」かな、と嫌な予感がしましたが、このような画面は初めて見ました。
幸い、回復コンソールを動かすために必要なWindowsセットアップディスクは用意されていましたので、さっそく修復の準備に入ります。

ネットで対処法を探すと、マイクロソフトのページがヒット。

Microsoft サポート エラー メッセージ "次のファイルが存在しないかまたは壊れている" が表示され、製品版パッケージの Windows XP を起動できない

こちらの手順の通り、セットアップディスクを挿入してPCを起動、回復コンソールを起動してC:\WINDOWS\SYSTEM32\CONFIG ディレクトリに移動しました。
手順3のA-2でdir system を実行したところ、ファイルが存在。
A-3 のとおりにリネーム〜ディレクトリを再読み込み。
A-4 の copy c:\windows\repair\system を実行したところ、「ファイルがありません」のメッセージが。

C:\windows\repair ディレクトリの中を見てみると、system.bakはありましたが、 systemというファイルはありません。

「この場合はこのsystem.bak をsystem にリネームしてC:\WINDOWS\SYSTEM32\CONFIG ディレクトリに移せばいいんじゃね?」と安易に考えましたが、この件で調べると、実際に実行してとんでもない目にあった人のブログ記事を発見しました。

参考サイト : I will work it out - Windows XP修復大作戦

偉大な先人の失敗を無にしないようこの方法は排除し、同じブログ内の解決方法を参考に Linux のライブCDを作成、そこから起動してSystem volume Informationのレジストリバックアップから必要データを抽出する手順で行くことにしました。

ところで、このPC機種名はDELLのDimension2400というやつで、搭載メモリは512MBです。
当初Ubuntu12.04 のLiveCDを使ってみたんですがメモリ容量不足のようでデスクトップ画面の表示まで20分、そこからピクリとも動かなくなりました。
「とにかく軽いLinuxを!」と探した結果、PuppyLinux の存在を知り、これをCDに焼いて件のPCを起動したところ、今度はOK!ディスクのマウントも、デスクトップ上のアイコンをシングルクリックでOKですのでとても使いやすいです。
何はともあれ、第一に「Documents And Settings」の全ユーザーフォルダを外付けUSBにコピーし、業務データの救出を行いました。
(なお、今回の作業ではCドライブは PuppyLinux 上では sda2 と認識されました。)

続いてレジストリの修復です。こちらのサイトを参考に、ファイルをコピーします。

参考サイト : にがちゃんねる( ・`ω・´)キリッ - c0000218 Unknown Hard Error

ここでおかしなことに気が付きました。
マウントさえしてしまえば Windows がインストールされた問題のハードディスクは、Puppy 上からはすべてのファイルにGUI上でのアクセスが可能なはずですが、/mnt/sda2/WINDOWS/system32/ フォルダが空っぽに表示され、そこから奥には進めません。
それでは、とコンソール上でcdコマンドで system32 ディレクトリに入ろうとするとアクセスできない旨のエラー表示が。
しかし同じくコンソール上で ls /mnt/sda2/WINDOWS/system32/config を実行すると、内部のファイルがすべて表示されます。
下位ディレクトリの内容が読めてその上位ディレクトリが読めない、となると、上位ディレクトリである system32 に何か問題がありそうです。

ともあれ config ディレクトリへはアクセスできるようなので、コンソール上で以下のとおり作業しました。

1.C:\WINDOWS\system32\config\ 内の該当ファイルをリネーム
cd /mnt/sda2/WINDOWS/system32/config
mv DEFAULT DEFAULT.backup
mv SAM SAM.backup
mv SECURITY SECURITY.backup
mv SOFTWARE SOFTWARE.backup
mv SYSTEM SYSTEM.backup

2.レジストリのバックアップフォルダへ移動
cd /mnt/sda2/SYSTEM\ VOLUME\ INFORMATION/_restore*

このディレクト内で ls を実行、頭文字がRPでその後の数字が最大のものを探す
cd RPxxx(lsで見つけたディレクトリ)/snapshot

3.該当ファイルを c:\WINDOWS\system32\config\ へコピー
lsコマンドでディレクトリの内容を確認後、以下の5つのファイルをリネームしてコピーする
 _REGISTRY_MACHINE_SAM → SAM にリネーム
 _REGISTRY_MACHINE_SECURITY → SECURITY にリネーム
 _REGISTRY_MACHINE_SOFTWARE → SOFTWARE にリネーム
 _REGISTRY_MACHINE_SYSTEM → SYSTEM にリネーム
 _REGISTRY_USER_.DEFAULT → DEFAULT にリネーム

cp _REGISTRY_MACHINE_SAM /mnt/sda2/WINDOWS/system32/config/SAM
cp _REGISTRY_MACHINE_ SECURITY /mnt/sda2/WINDOWS/system32/config/ SECURITY
cp _REGISTRY_MACHINE_ SOFTWARE /mnt/sda2/WINDOWS/system32/config/ SOFTWARE
cp _REGISTRY_MACHINE_ SYSTEM /mnt/sda2/WINDOWS/system32/config/ SYSTEM
cp _REGISTRY_USER_.DEFAULT /mnt/sda2/WINDOWS/system32/config/DEFAULT

4.作業内容を確認
ls /mnt/sda2/WINDOWS/system32/config

5.問題なければハードディスクをアンマウントして再起動

「さあ、これでバッチリ!」と再起動したところ、

次のファイルが存在しないかまたは壊れているため、Windowsを起動できませんでした:

\WINDOWS\SYSTEM32\l_intl.nls

オリジナルセットアップCD-ROMからWindowsセットアップを起動して、このファイルを修復できます。
修復するには、最初の画面で' R 'キーを押してください。

ああ、もう・・・(´;ω;`)

\WINDOWS\SYSTEM32\l_intl.nls でWeb検索してみると、どうもファイルシステムの破損により読み取れない箇所ができている可能性が高くなりました。
現に、再度Windowsセットアップディスクから回復コンソールを起動、
dir C:\WINDOWS\system32

を実行したところ、lz32.dllまで表示した後、「ディレクトリを列挙するときにエラーが発生しました。」と出ます。

読み込めないディスクの回復方法として
chkdir C: /r
fixmbr

を実行してみました。

chkdskでは実行中に「ボリュームに回復できない問題が1つ以上あります。」と出て中断してしまいました。本当にこれはもう駄目っぽいです(fixmbrは問題なく終了しました)。

完全にあきらめムードでセットアップディスクを入れたまま再起動したところ、どういうわけかWindowsXPの起動画面が!

「???」と画面を見ていると、起動画面上で自動的にCHKDSKが開始され、CDからいくつかのファイルをコピーしている様子。勝手にsystem32フォルダをリカバーしているように見えます。

そのまま待つと、XPのログイン画面が表示されました。おっと、復旧!?
通常使用していたユーザー名でログインしてみると、

「ローカルに格納されているプロファイルを読み込めません」
「ローカルのプロファイルが見つかりません」

のメッセージが出て、仮のユーザーでログインさせられました。
この現象については、Administratorで新しいユーザーを作成、破損したユーザーのデータをその新しいユーザーに丸ごとコピーして事なきを得ました。

Microsoft サポート WindowsXPで、破損したユーザー プロファイルのデータを新しいプロファイルにコピーする方法

・・・それにしてもよくもまあ、復旧できたものです。

結局今回のケースはハードディスク上の読み込み不能箇所の発生によるものと思われ、最初のレジストリファイルの書き換えなしでも、CHKDSK だけで解決したかもしれません。

いずれにせよこの障害が発生した機種は相当古いもので、システムファイルの読み込み不良が現実に発生しましたので、いつ本当にハードディスク自体がダメになるかわかりません。
「必要なファイルはUSBメモリ等に常にバックアップしておいてください」と、きつーく伝えて、今回の作業は終了しました。

数日後、このパソコンでExcel使用中に固まった、との連絡を受けてイベントログを見たところ、Cドライブ上に不良ブロックがあるとのエラーが、今回の作業直後から連続して発生していました。
今度はWindows起動中にCドライブのプロパティ→ツール→エラーチェック→「不良セクタをスキャンし、回復する」にチェックを入れて再起動しました。
チェックディスク画面ではやはり C:\WINDOWS\system32\config\system の修復が行われ、約1時間ほどで通常起動、イベントログ上のエラーも出なくなりました。

しかしこのような状態ですので早いうちにハードディスクを交換するなり、パソコンそのものを買い替えるなり、何らかの手を打つ必要がありそうです。

posted by nambei-x at 10:28| Comment(0) | TrackBack(0) | PC・ネット関連 | このブログの読者になる | 更新情報をチェックする

2012年07月07日

iモードブラウザ1.0からのアクセスを別のページにリダイレクトするための.htaccessの記述

現在制作中の携帯サイトについて、外部CSSに対応しているAU、SBおよびdocomoのi-modeブラウザ2.0機種以外、つまりDocomoのi-mode1.0からのアクセスだけを別ページにリダイレクトするための.htaccessの書式です。
外部CSSに対応している機種はそのまま、外部CSSを読み取れないi-mode1.0以前のdocomo端末はすべて別ページに飛ばそうという考えです。
テスト用のWebサーバはローカルネットワーク内のApache2.2、携帯サイトのドキュメントは/mobile/ 以下、i-mode1.0からのアクセスのリダイレクト先は/mobile/i/ 以下、という設定です。
このサーバに携帯電話からアクセスすることはできませんので、ローカルネットワーク上のPCにFirefox用のアドイン「FireMobileSimulator」をインストール、ユーザーエージェントを携帯端末に偽装してアクセスします。なお、ユーザーエージェントは「FireMobileSimulator」のオプション設定で適宜修正しています。

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} DoCoMo/1.0 [OR]
RewriteCond %{HTTP_USER_AGENT} DoCoMo/2.0.*c100|c10
RewriteRule ^$ http://xxxxxx/mobile/i/ [R]

2行目、DoCoMo/1.0とはどうやらmova端末のようで、movaは2012年3月31日限りでサービスが終了しているようなのでなくてもよさそうですが、とりあえず入れときます。
3行目、FOMA端末のi-modeブラウザ1.0と2.0の判別方法は、キャッシュサイズが100KB以下かそれ以上かのだそうで、これで悩みました。
.htaccessは正規表現が使えると知ったので、いろいろ試行錯誤の結果(正規表現は・・・なので)、文字も数字も記号も全部ひっくるめられる「.*」を使って収めました。キャッシュサイズはほぼ全機種がc100の記述ですが、1機種だけc10の端末があり、「|」を使ってみました。

これでローカルネットワーク上のPCから「FireMobileSimulator」経由でサーバにアクセス、該当の端末でのアクセスでi-mode1.0端末用のURLにリダイレクトされることを確認しました。
Apacheのaccess.logは以下の通り(一部省略しています)。

Firefoxから
"GET /mobile/ HTTP/1.1" 200 2978 "-" "Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1"
docomo F-02D(FOMA、i-mode2.0)から
"GET /mobile/ HTTP/1.1" 200 2978 "-" "DoCoMo/2.0 F02D(c500;TB;W24H16)(c500;TB;W24H12)"
docomo N504i(mova、i-mode1.0)から
"GET /mobile/ HTTP/1.1" 302 213 "-" "DoCoMo/1.0/N504i/c10/TB/c10/TB/W24H12"
"GET /mobile/i/ HTTP/1.1" 200 2761 "-" "DoCoMo/1.0/N504i/c10/TB/c10/TB/W24H12"
docomo N2001(FOMA、i-mode1.0)から
"GET /mobile/ HTTP/1.1" 302 213 "-" "DoCoMo/2.0 N2001(c10)(c10;TB;W24H12)"
"GET /mobile/i/ HTTP/1.1" 200 2761 "-" "DoCoMo/2.0 N2001(c10)(c10;TB;W24H12)"
docomo N06B(FOMA、i-mode1.0)から
"GET /mobile/ HTTP/1.1" 302 213 "-" "DoCoMo/2.0 N06B(c100;TB;W24H16)(c100;TB;W24H12)"
"GET /mobile/i/ HTTP/1.1" 200 2761 "-" "DoCoMo/2.0 N06B(c100;TB;W24H16)(c100;TB;W24H12)"

この振り分けはあくまで http://xxxxxx/mobile/ にアクセスした場合にのみ有効で、
/mobile/index.html → /mobile/i/index.html
/mobile/new.html → /mobile/i/new.html
といった振り分けはできません。公表するのは http://xxxxxx/mobile/ だけだから個別のファイルへのアクセスまで対応しなくてもいいかな、と思いつつも何とかしたいな、とは思っています。



それにしても、わざわざこんな振り分けをしなくてはいけないような旧docomoのダメダメな仕様には本当に腹が立ちます(以下愚痴です)。

外部CSSに非対応なのはまだ許せるにしても、i-mode1.0で使えるプロパティの少なさには今も泣かされてます。
特にmarginがほぼ完璧に使えない、というのは拷問に近いです。インデントや一行空けのために、テーブルを使ったりbrタグを付け加えたり、コードがめちゃくちゃ汚くなりました。苦労した割に出来上がりは他のキャリア向けページと比べると、思わず頭を抱えてうなだれてしまうほどひどいです。

ユーザーエージェントの命名方法にも問題があるし。
どうして新旧のブラウザがどちらも「DoCoMo/2.0」なのか。
外部CSSへの対応以外にもJavaScript対応など、内容的に i-mode1.0 → 2.0 の仕様変更はかなりの大事だと思うんですよ。
2.0でできるけど1.0でできないことは数多くありますので、両方に対応(=下位互換)では2.0で使用可能な技術の導入が停滞します。2.0の機能をフルに使うためにサーバ側で対応端末を選別するのは開発者にとっては選択肢の一つになりますし、ユーザーにとっても親切なことだと思います。
ちょっと気を利かせてくれるだけでずいぶん多くの人がいい思いできただろうに、何でドコモの連中はここに思いが至らなかったのか、あるいは手を付けなかったのか。大きい会社とはいえ、謎すぎます。


続き書きました。こちらです。




posted by nambei-x at 22:24| Comment(0) | TrackBack(0) | PC・ネット関連 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。