ローカルセキュリティポリシーのでGuestからのアクセスが拒否されているので有功にする。
あとはフォルダを共有しでEveryoneに読み込みや書き込みの許可を与える。
1 2 3 4 5 6 7 8 9 |
BOOL SetMenuItemString(HMENU menu, UINT id, LPCTSTR pStr) { MENUITEMINFO miiset; miiset.cbSize=sizeof(miiset); miiset.wID = id; miiset.fMask = MIIM_STRING; miiset.dwTypeData = (LPTSTR)(LPCTSTR)pStr; return SetMenuItemInfo(menu,id,FALSE, &miiset); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
#pragma once template<class T> class CSessionGlobalMemory { public: explicit CSessionGlobalMemory(LPCSTR pName) { h_=NULL; p_=NULL; m_=NULL; size_t len=lstrlenA(pName); m_pName = (LPSTR)LocalAlloc(LMEM_FIXED, len+sizeof(char)); lstrcpyA(m_pName, pName); m_pMutexName = (LPSTR)LocalAlloc(LMEM_FIXED, len+sizeof("_Mutex")-1+sizeof(char)); lstrcpyA(m_pMutexName, pName); lstrcatA(m_pMutexName, "_Mutex"); } ~CSessionGlobalMemory(){ release(); } operator T() { return get(); } void operator =(const T& t) { set(t); //return t; } private: class Locker { public: HANDLE m_; Locker(HANDLE m) { m_=m; WaitForSingleObject(m,INFINITE); } ~Locker() { ReleaseMutex(m_); } }; void release() { if(p_) { UnmapViewOfFile(p_); p_=NULL; } if(h_) { CloseHandle(h_); h_=NULL; } if(m_) { CloseHandle(m_); m_=NULL; } LocalFree(m_pName); LocalFree(m_pMutexName); } void ensure() { if(!m_) { m_=CreateMutexA(NULL,FALSE,m_pMutexName); } bool first=false; if(!h_) { h_=CreateFileMappingA( INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0,sizeof(T), m_pName); if(h_ && GetLastError()!=ERROR_ALREADY_EXISTS) { first = true; } } if(!p_) { p_=MapViewOfFile( h_, FILE_MAP_READ|FILE_MAP_WRITE, 0,0, sizeof(T)); } if(first) { Locker l(m_); if(first) { memset(p_,0,sizeof(T)); first=false; } } } T get() { ensure(); Locker l(m_); T t; memcpy(&t,p_,sizeof(t)); return t; } void set(const T& t) { ensure(); Locker l(m_); memcpy(p_, &t, sizeof(t)); } bool first_; HANDLE h_; void* p_; HANDLE m_; LPSTR m_pName; LPSTR m_pMutexName; }; |
最初に0クリアする方法がいまいちわからなかった。
カーネルオブジェクトの名前にLocal/やglobal/をつければセッション間でもできるみたいだがスルー
結果
ファイル一式
Eclipse IDE for Java Developersをダウンロードして展開、起動する。
このバージョンはVersion: Luna Service Release 1 (4.4.1)
メニューからHelp Install New Softwareを選択
Work withからLuna を選択
リストからCollaboration Subversive SVN Team Providerを選択
適当に進んで、Eclipseを再起動してインストール完了
SubversiveはConnectorもインストールしないと使えないのでインストールする。
使うときになるとインストールダイアログが出るのでプロジェクトを新規作成でSVNからつくる。
Windowsの場合はJavaHLがいいようだ。
適当に進んでインストール完了
つぎにPyDevのインストール
Help Install New Softwareを選択
Work withのAddをクリック
PyDevを選択してインストール
http://sourceforge.net/projects/mingw/files/ へいってmingw-get-setup.exeをダウンロードして実行
とりあえずmingw32-baseをマークしてApply Changesしてインストール
基本的なGNU開発ツールがインストールされたようだ。
コマンドプロンプトだといやなのでmsys-baseもインストールした。
C:\MinGW\msys\1.0\msys.batを実行
1 2 3 4 5 6 7 |
$ mount C:\DOCUME~1\WATARU~1\LOCALS~1\Temp on /tmp type user (binmode,noumount) C:\MinGW\msys\1.0 on /usr type user (binmode,noumount) C:\MinGW\msys\1.0 on / type user (binmode,noumount) a: on /a type user (binmode,noumount) c: on /c type user (binmode,noumount) d: on /d type user (binmode,noumount) |
ただコマンドプロンプトだといやなのでmsys-minttyをインストール
C:\MinGW\msys\1.0\bin\mintty.exeのショートカットを作ってオプションに-を追加。
できた。
ただまだMinGWにパスが通ってないのでfstabを編集する。msysからできる。
(vimもなかったのでmsys-vimもインストール)
1 2 3 4 5 6 7 8 9 10 11 12 |
WataruTheLegend@XP-DN4ONLY ~ $ cat /etc/fstab WataruTheLegend@XP-DN4ONLY ~ $ cp /etc/fstab fstab fstab.sample WataruTheLegend@XP-DN4ONLY ~ $ cp /etc/fstab.sample /etc/fstab WataruTheLegend@XP-DN4ONLY ~ $ vim /etc/fstab |
これでgccが見えるようになった。
1 2 3 |
$ which gcc /mingw/bin/gcc.exe $ |
Cプログラムhello.cを作成
1 2 3 4 5 6 |
#include <stdio.h> void main() { printf("hello\n"); } |
コンパイルして実行
1 2 3 4 5 6 7 8 9 10 |
WataruTheLegend@XP-DN4ONLY ~/T $ gcc hello.c WataruTheLegend@XP-DN4ONLY ~/T $ ls a.exe hello.c WataruTheLegend@XP-DN4ONLY ~/T $ a.exe hello |
winhello.cを作成
1 2 3 4 5 6 7 8 9 10 11 12 |
#include <windows.h> int WINAPI WinMain( HINSTANCE hInstance, // 現在のインスタンスのハンドル HINSTANCE hPrevInstance, // 以前のインスタンスのハンドル LPSTR lpCmdLine, // コマンドライン int nCmdShow // 表示状態 ) { MessageBox(NULL,"hello","hello",MB_OK); return 0; } |
実行
dependencywalkerで依存DLLを調べてみる
インストールに使っていたmingw-getはコマンドからも使えるようだ。
1 |
$ mingw-get.exe list | grep -i aaa |
pythonは基本Unicodeなので悩むことはないと思ってもWindowsのコンソール出力はunicode対応してない(多分)ので、printなどの出力は日本語環境だとpythonは内部的にcp932に変換しなくてはならないと思われる。
以下のファイルをWindowsのコンソールからpythonで実行すると例外が発生する。
1 2 |
a='你们' print(a) |
1 2 3 4 5 6 7 8 |
C:\work\pyerh>c:\LegacyPrograms\Python34\python.exe nimen.py Traceback (most recent call last): File "nimen.py", line 2, in <module> print(a) UnicodeEncodeError: 'cp932' codec can't encode character '\u4f60' in position 0: illegal multibyte sequence C:\work\pyerh> |
C++や.NETでもUnicodeはコンソールに出力できないようだ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include "stdafx.h" #include <stdio.h> #include <windows.h> using namespace System; int main(array<System::String ^> ^args) { Console::WriteLine(L"你们"); _putws(L"你们"); wprintf(L"你们"); DWORD d; WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), L"你们", sizeof(L"你们")-2, &d, NULL); return 0; } |
このファイルはsigつきutf8かUnicode(UTF16)で保存すればclは理解できる。
出力
1 2 |
?? `O・ |
.netのWriteLine()は??に置き換えてるのでpythonでもこのやり方でやってみる。
1 2 3 4 5 |
def myprint(s): sys.stdout.buffer.write(s.encode('cp932', errors='replace')) a='你们' myprint(a) |
このやり方だと美しくないし、パイプ処理のときはおそらくutf8でもOKなのでもっとうまいやり方があるのかもしれない。
Qtのフリーバージョンをダウンロードして起動、インストール先はC:\Qt
msvc2010 32-bit OpenGLとSource Componentをチェックしてインストール
作業フォルダ(ここではC:\work\qtvc)に以下のファイル作成
hello.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include "hello.h" MyPushButton::MyPushButton(const QString &text) : QPushButton(text) { setObjectName("mypushbutton"); qDebug() << "My PushButton has been constructed"; } |
hello.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include class MyPushButton : public QPushButton { public: MyPushButton(const QString &text); }; |
main.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** You may use this file under the terms of the BSD license as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names ** of its contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include "hello.h" int main(int argc, char **argv) { QApplication app(argc, argv); MyPushButton helloButton("Hello world!"); helloButton.resize(100, 30); helloButton.show(); return app.exec(); } |
hello.pro
1 2 3 4 5 |
QT += widgets HEADERS += hello.h SOURCES += hello.cpp SOURCES += main.cpp |
コマンドプロンプトを開いてqtenv2.batとvcvarsall.batを実行
1 2 3 4 5 6 7 8 9 10 11 12 |
C:\work\qtvc>c:\Qt\5.4\msvc2010_opengl\bin\qtenv2.bat C:\work\qtvc>echo off Setting up environment for Qt usage... Remember to call vcvarsall.bat to complete environment setup! C:\Qt\5.4\msvc2010_opengl>"c:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" Setting environment for using Microsoft Visual Studio 2010 x86 tools. C:\Qt\5.4\msvc2010_opengl>cd c:\work\qtvc C:\work\qtvc> |
qmake -tpでvcのプロジェクトファイルを作る
1 |
C:\work\qtvc>qmake -tp vc |
pathにqt環境がないとVCで作ったEXEがDLLを見つけられないのでコマンドプロンプトからVCを起動する。vcvarsall.batを実行してるのでvcexpressはフルパスでなくていいようだ。
1 |
C:\work\qtvc>vcexpress hello.vcxproj |
デバッグビルドしてF11で実行するとソースの場所を聞かれるのでC:\Qt\5.4\Src以下から探して教える。
この例の場合はC:\Qt\5.4\Src\qtbase\src\winmainにある。
できた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
REG QUERY HKLM\System\CurrentControlSet\Control\Nls\Language /v InstallLanguage | Find "0411" IF %ERRORLEVEL% == 1 goto nonjp IF %ERRORLEVEL% == 0 goto jp goto end :jp echo "jp" goto end :nonjp echo "nonjp" goto end :end |
ERRORLEVELはFINDの戻り値。
0 : 見つかった
1 : 見つからなかった
2 : エラー
LANGID
Language Identifier Constants and Strings (Windows)
上記の例はインストール時の言語の様な気もするので
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\ACP
のほうがいいかも、これは非ユニコードアプリのcode pageと思われる
シンボリックリンクの簡易バージョンようなもの、ファイルには使えない。
Sysinternalsのjunctionコマンドの場合(XP)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
C:\T\JC>dir ドライブ C のボリューム ラベルは XP-DEF です ボリューム シリアル番号は CA34-3AB5 です C:\T\JC のディレクトリ 2014/12/27 10:34 <DIR> . 2014/12/27 10:34 <DIR> .. 0 個のファイル 0 バイト 2 個のディレクトリ 5,071,396,864 バイトの空き領域 C:\T\JC>c:\Linkout\SysinternalsSuite\junction.exe linking C:\Linkout\Linked Junction v1.06 - Windows junction creator and reparse point viewer Copyright (C) 2000-2010 Mark Russinovich Sysinternals - www.sysinternals.com Created: C:\T\JC\linking Targetted at: C:\Linkout\Linked C:\T\JC>dir ドライブ C のボリューム ラベルは XP-DEF です ボリューム シリアル番号は CA34-3AB5 です C:\T\JC のディレクトリ 2014/12/27 10:35 <DIR> . 2014/12/27 10:35 <DIR> .. 2014/12/27 10:35 <JUNCTION> linking 0 個のファイル 0 バイト 3 個のディレクトリ 5,071,396,864 バイトの空き領域 C:\T\JC>dir linking ドライブ C のボリューム ラベルは XP-DEF です ボリューム シリアル番号は CA34-3AB5 です C:\T\JC\linking のディレクトリ 2014/12/27 10:11 <DIR> . 2014/12/27 10:11 <DIR> .. 2013/11/13 19:42 35,992 kprocesshacker.sys 2013/12/22 16:12 176,472 peview.exe 2014/12/27 10:18 <DIR> plugins 2013/12/22 16:12 1,175,384 ProcessHacker.exe 3 個のファイル 1,387,848 バイト 3 個のディレクトリ 5,071,396,864 バイトの空き領域 C:\T\JC>rmdir linking |
ファイル名やフォルダ名に対してリンクするようなもの
mklinkコマンドで作る(Vista以降)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
C:\T\jc>mklink /D linking C:\Linkout\Linked linking <<===>> C:\Linkout\Linked のシンボリック リンクが作成されました C:\T\jc>dir linking ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は CA34-3AB5 です C:\T\jc\linking のディレクトリ 2014/12/27 20:01 <DIR> . 2014/12/27 20:01 <DIR> .. 2014/12/27 20:02 12 linkedfile.txt 1 個のファイル 12 バイト 2 個のディレクトリ 3,454,509,056 バイトの空き領域 C:\T\jc>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は CA34-3AB5 です C:\T\jc のディレクトリ 2014/12/27 20:04 <DIR> . 2014/12/27 20:04 <DIR> .. 2014/12/27 20:04 <SYMLINKD> linking [C:\Linkout\Linked] 0 個のファイル 0 バイト 3 個のディレクトリ 3,454,509,056 バイトの空き領域 C:\T\jc>rmdir linking C:\T\jc>mklink /D linkingfile.txt C:\Linkout\Linked\linkedfile.txt linkingfile.txt <<===>> C:\Linkout\Linked\linkedfile.txt のシンボリック リンクが 作成されました C:\T\jc>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は CA34-3AB5 です C:\T\jc のディレクトリ 2014/12/27 20:05 <DIR> . 2014/12/27 20:05 <DIR> .. 2014/12/27 20:05 <SYMLINKD> linkingfile.txt [C:\Linkout\Linked\linkedfil e.txt] 0 個のファイル 0 バイト 3 個のディレクトリ 3,454,509,056 バイトの空き領域 C:\T\jc>del linkingfile.txt ディレクトリ名が無効です。 C:\T\jc>rmdir linkingfile.txt |
ファイルにシンボリックリンクは張るとディレクトリ属性になるみたいでファイルとして扱いづらい。しかしファイルとして開けばファイルになるようだ。
ハードリンクはファイル実体に対して2つ以上のファイル名を持てる仕組み、通常ディレクトリには適用できない。
fsutilコマンド作れる。(XP)
mklinkでも作れる(Vista)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
C:\T\JC>dir ドライブ C のボリューム ラベルは XP-DEF です ボリューム シリアル番号は CA34-3AB5 です C:\T\JC のディレクトリ 2014/12/27 10:48 <DIR> . 2014/12/27 10:48 <DIR> .. 0 個のファイル 0 バイト 2 個のディレクトリ 5,030,092,800 バイトの空き領域 C:\T\JC>fsutil hardlink create linking.txt C:\Linkout\Linked\LinkedFile.txt C:\T\JC\linking.txt <<===>> C:\Linkout\Linked\LinkedFile.txt のハードリンクが作 成されました C:\T\JC>dir ドライブ C のボリューム ラベルは XP-DEF です ボリューム シリアル番号は CA34-3AB5 です C:\T\JC のディレクトリ 2014/12/27 10:49 <DIR> . 2014/12/27 10:49 <DIR> .. 2014/12/27 10:48 5 linking.txt 1 個のファイル 5 バイト 2 個のディレクトリ 5,030,486,016 バイトの空き領域 C:\T\JC>del linking.txt |
ジャンクションやシンボリックリンクはディレクトリ扱いになり、属性にReparsePointフラグが立つ。
1 |
System.IO.FileAttributes.ReparsePoint |
1 |
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 |