Changeset 1207


Ignore:
Timestamp:
9/29/2009 10:15:49 AM (5 years ago)
Author:
lowjoel
Message:

Implemented FAT directory cleaning.

Location:
trunk/eraser6
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/eraser6/Eraser.Util.FileSystem/Eraser.Util.FileSystem.vcproj

    r1206 r1207  
    2424            OutputDirectory="$(SolutionDir)\bin\$(ConfigurationName)\$(PlatformName)" 
    2525            IntermediateDirectory="obj\$(ConfigurationName)\$(PlatformName)" 
    26             ConfigurationType="1" 
     26            ConfigurationType="2" 
    2727            CharacterSet="1" 
    2828            ManagedExtensions="1" 
  • trunk/eraser6/Eraser.Util.FileSystem/FatApi.cpp

    r1206 r1207  
    2929using namespace System::IO; 
    3030using namespace System::Runtime::InteropServices; 
     31using namespace Microsoft::Win32::SafeHandles; 
    3132 
    3233namespace Eraser { 
     
    4041        memset(BootSector, 0, sizeof(*BootSector)); 
    4142        Fat = NULL; 
     43 
     44        //Open the handle to the drive 
     45        CString volumeName(info->VolumeId); 
     46        volumeName.Truncate(volumeName.GetLength() - 1); 
     47        VolumeHandle = gcnew SafeFileHandle(static_cast<IntPtr>(CreateFile(volumeName, 
     48                    GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL)), 
     49            true); 
     50        VolumeStream = gcnew FileStream(VolumeHandle, FileAccess::Read); 
     51 
     52        //Then read the boot sector for information 
     53        array<Byte>^ bootSector = gcnew array<Byte>(sizeof(*BootSector)); 
     54        VolumeStream->Seek(0, SeekOrigin::Begin); 
     55        VolumeStream->Read(bootSector, 0, sizeof(*BootSector)); 
     56        Marshal::Copy(bootSector, 0, static_cast<IntPtr>(BootSector), bootSector->Length); 
     57    } 
     58 
     59    FatApi::FatApi(VolumeInfo^ info, Microsoft::Win32::SafeHandles::SafeFileHandle^ handle, 
     60        IO::FileAccess access) 
     61    { 
     62        SectorSize = info->SectorSize; 
     63        ClusterSize = info->ClusterSize; 
     64 
     65        BootSector = new FatBootSector(); 
     66        memset(BootSector, 0, sizeof(*BootSector)); 
     67        Fat = NULL; 
     68 
     69        //Open the handle to the drive 
     70        VolumeHandle = handle; 
     71        VolumeStream = gcnew FileStream(VolumeHandle, access); 
     72 
     73        //Then read the boot sector for information 
     74        array<Byte>^ bootSector = gcnew array<Byte>(sizeof(*BootSector)); 
     75        VolumeStream->Seek(0, SeekOrigin::Begin); 
     76        VolumeStream->Read(bootSector, 0, sizeof(*BootSector)); 
     77        Marshal::Copy(bootSector, 0, static_cast<IntPtr>(BootSector), bootSector->Length); 
    4278    } 
    4379 
     
    251287                { 
    252288                    //The previous few entries contained the correct file name. Save these entries 
    253                     validEntries.insert(validEntries.end(), longFileNameBegin, i - 1); 
     289                    validEntries.insert(validEntries.end(), longFileNameBegin, i); 
    254290                } 
    255291            } 
     
    264300 
    265301        //Write the entries to disk 
    266         Api->SetFileContents(&validEntries.front(), Api->FileSize(Cluster), Cluster); 
     302        Api->SetFileContents(Directory, Api->FileSize(Cluster), Cluster); 
    267303    } 
    268304 
     
    272308        if (info->VolumeFormat != L"FAT32") 
    273309            throw gcnew ArgumentException(L"The volume provided is not a FAT32 volume."); 
    274  
    275         //Open the handle to the drive 
    276         CString volumeName(info->VolumeId); 
    277         volumeName.Truncate(volumeName.GetLength() - 1); 
    278         VolumeHandle = gcnew Microsoft::Win32::SafeHandles::SafeFileHandle( 
    279             static_cast<IntPtr>(CreateFile(volumeName, GENERIC_READ, 0, NULL, 
    280             OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL)), true); 
    281         VolumeStream = gcnew FileStream(VolumeHandle, FileAccess::Read); 
    282  
    283         //Then read the boot sector for information 
    284         array<Byte>^ bootSector = gcnew array<Byte>(sizeof(*BootSector)); 
    285         VolumeStream->Seek(0, SeekOrigin::Begin); 
    286         VolumeStream->Read(bootSector, 0, sizeof(*BootSector)); 
    287         Marshal::Copy(bootSector, 0, static_cast<IntPtr>(BootSector), bootSector->Length); 
     310    } 
     311 
     312    Fat32Api::Fat32Api(VolumeInfo^ info, Microsoft::Win32::SafeHandles::SafeFileHandle^ handle, 
     313        IO::FileAccess access) : FatApi(info, handle, access) 
     314    { 
     315        //Sanity checks: check that this volume is FAT32! 
     316        if (info->VolumeFormat != L"FAT32") 
     317            throw gcnew ArgumentException(L"The volume provided is not a FAT32 volume."); 
    288318    } 
    289319 
  • trunk/eraser6/Eraser.Util.FileSystem/FatApi.h

    r1206 r1207  
    3535        /// Constructor. 
    3636        ///  
    37         /// \param[in] info The volume to create the FAT API for. 
     37        /// \param[in] info   The volume to create the FAT API for. The volume handle 
     38        ///                   created has read access only. 
    3839        FatApi(VolumeInfo^ info); 
     40 
     41        /// Constructor. 
     42        ///  
     43        /// \param[in] info   The volume to create the FAT API for. 
     44        /// \param[in] handle A handle to the volume for read/write requests. 
     45        /// \param[in] access The access required for the volume. 
     46        FatApi(VolumeInfo^ info, Microsoft::Win32::SafeHandles::SafeFileHandle^ handle, 
     47             IO::FileAccess access); 
    3948 
    4049    public: 
     
    143152    public: 
    144153        Fat32Api(VolumeInfo^ info); 
     154        Fat32Api(VolumeInfo^ info, Microsoft::Win32::SafeHandles::SafeFileHandle^ handle, 
     155             IO::FileAccess access); 
    145156 
    146157    public: 
  • trunk/eraser6/Eraser.Util/VolumeInfo.cs

    r1139 r1207  
    241241 
    242242        /// <summary> 
     243        /// Determines the sector size of the current volume. 
     244        /// </summary> 
     245        public int SectorSize 
     246        { 
     247            get 
     248            { 
     249                uint clusterSize, sectorSize, freeClusters, totalClusters; 
     250                if (KernelApi.NativeMethods.GetDiskFreeSpace(VolumeId, out clusterSize, 
     251                    out sectorSize, out freeClusters, out totalClusters)) 
     252                { 
     253                    return (int)sectorSize; 
     254                } 
     255 
     256                throw Marshal.GetExceptionForHR(Marshal.GetHRForLastWin32Error()); 
     257            } 
     258        } 
     259 
     260        /// <summary> 
    243261        /// Checks if the current user has disk quotas on the current volume. 
    244262        /// </summary> 
  • trunk/eraser6/Eraser.sln

    r1202 r1207  
    4646Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Eraser.Util.Unlocker", "Eraser.Util.Unlocker\Eraser.Util.Unlocker.vcproj", "{BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}" 
    4747EndProject 
     48Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Eraser.Util.FileSystem", "Eraser.Util.FileSystem\Eraser.Util.FileSystem.vcproj", "{70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}" 
     49EndProject 
    4850Global 
    4951    GlobalSection(SolutionConfigurationPlatforms) = preSolution 
     
    5254        Debug|Win32 = Debug|Win32 
    5355        Debug|x64 = Debug|x64 
    54         Debug|x86 = Debug|x86 
    5556        Release|Any CPU = Release|Any CPU 
    5657        Release|Mixed Platforms = Release|Mixed Platforms 
    5758        Release|Win32 = Release|Win32 
    5859        Release|x64 = Release|x64 
    59         Release|x86 = Release|x86 
    6060    EndGlobalSection 
    6161    GlobalSection(ProjectConfigurationPlatforms) = postSolution 
     
    6565        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU 
    6666        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Debug|Win32.ActiveCfg = Debug|Any CPU 
     67        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Debug|Win32.Build.0 = Debug|Any CPU 
    6768        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Debug|x64.ActiveCfg = Debug|Any CPU 
    68         {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Debug|x86.ActiveCfg = Debug|Any CPU 
     69        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Debug|x64.Build.0 = Debug|Any CPU 
    6970        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Release|Any CPU.ActiveCfg = Release|Any CPU 
    7071        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Release|Any CPU.Build.0 = Release|Any CPU 
     
    7273        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Release|Mixed Platforms.Build.0 = Release|Any CPU 
    7374        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Release|Win32.ActiveCfg = Release|Any CPU 
     75        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Release|Win32.Build.0 = Release|Any CPU 
    7476        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Release|x64.ActiveCfg = Release|Any CPU 
    7577        {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Release|x64.Build.0 = Release|Any CPU 
    76         {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Release|x86.ActiveCfg = Release|Any CPU 
    77         {A9884ABF-46E8-42C1-A30B-9A3DD6C38004}.Release|x86.Build.0 = Release|Any CPU 
    7878        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 
    7979        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Debug|Any CPU.Build.0 = Debug|Any CPU 
     
    8181        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU 
    8282        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Debug|Win32.ActiveCfg = Debug|Any CPU 
     83        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Debug|Win32.Build.0 = Debug|Any CPU 
    8384        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Debug|x64.ActiveCfg = Debug|Any CPU 
    84         {C1AC3255-0939-499D-A69D-725E3DD4F574}.Debug|x86.ActiveCfg = Debug|Any CPU 
     85        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Debug|x64.Build.0 = Debug|Any CPU 
    8586        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Release|Any CPU.ActiveCfg = Release|Any CPU 
    8687        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Release|Any CPU.Build.0 = Release|Any CPU 
     
    8889        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Release|Mixed Platforms.Build.0 = Release|Any CPU 
    8990        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Release|Win32.ActiveCfg = Release|Any CPU 
     91        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Release|Win32.Build.0 = Release|Any CPU 
    9092        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Release|x64.ActiveCfg = Release|Any CPU 
    9193        {C1AC3255-0939-499D-A69D-725E3DD4F574}.Release|x64.Build.0 = Release|Any CPU 
    92         {C1AC3255-0939-499D-A69D-725E3DD4F574}.Release|x86.ActiveCfg = Release|Any CPU 
    93         {C1AC3255-0939-499D-A69D-725E3DD4F574}.Release|x86.Build.0 = Release|Any CPU 
    9494        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 
    9595        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Debug|Any CPU.Build.0 = Debug|Any CPU 
     
    9797        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU 
    9898        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Debug|Win32.ActiveCfg = Debug|Any CPU 
     99        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Debug|Win32.Build.0 = Debug|Any CPU 
    99100        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Debug|x64.ActiveCfg = Debug|Any CPU 
    100         {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Debug|x86.ActiveCfg = Debug|Any CPU 
     101        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Debug|x64.Build.0 = Debug|Any CPU 
    101102        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Release|Any CPU.ActiveCfg = Release|Any CPU 
    102103        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Release|Any CPU.Build.0 = Release|Any CPU 
     
    104105        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Release|Mixed Platforms.Build.0 = Release|Any CPU 
    105106        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Release|Win32.ActiveCfg = Release|Any CPU 
     107        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Release|Win32.Build.0 = Release|Any CPU 
    106108        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Release|x64.ActiveCfg = Release|Any CPU 
    107109        {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Release|x64.Build.0 = Release|Any CPU 
    108         {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Release|x86.ActiveCfg = Release|Any CPU 
    109         {D083E1A8-3A4C-4683-9B3F-D5FEDE61B9C9}.Release|x86.Build.0 = Release|Any CPU 
    110110        {21752123-7BD7-4B44-B512-14A963C55FD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 
    111111        {21752123-7BD7-4B44-B512-14A963C55FD8}.Debug|Any CPU.Build.0 = Debug|Any CPU 
     
    113113        {21752123-7BD7-4B44-B512-14A963C55FD8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU 
    114114        {21752123-7BD7-4B44-B512-14A963C55FD8}.Debug|Win32.ActiveCfg = Debug|Any CPU 
     115        {21752123-7BD7-4B44-B512-14A963C55FD8}.Debug|Win32.Build.0 = Debug|Any CPU 
    115116        {21752123-7BD7-4B44-B512-14A963C55FD8}.Debug|x64.ActiveCfg = Debug|Any CPU 
    116         {21752123-7BD7-4B44-B512-14A963C55FD8}.Debug|x86.ActiveCfg = Debug|Any CPU 
     117        {21752123-7BD7-4B44-B512-14A963C55FD8}.Debug|x64.Build.0 = Debug|Any CPU 
    117118        {21752123-7BD7-4B44-B512-14A963C55FD8}.Release|Any CPU.ActiveCfg = Release|Any CPU 
    118119        {21752123-7BD7-4B44-B512-14A963C55FD8}.Release|Any CPU.Build.0 = Release|Any CPU 
     
    120121        {21752123-7BD7-4B44-B512-14A963C55FD8}.Release|Mixed Platforms.Build.0 = Release|Any CPU 
    121122        {21752123-7BD7-4B44-B512-14A963C55FD8}.Release|Win32.ActiveCfg = Release|Any CPU 
     123        {21752123-7BD7-4B44-B512-14A963C55FD8}.Release|Win32.Build.0 = Release|Any CPU 
    122124        {21752123-7BD7-4B44-B512-14A963C55FD8}.Release|x64.ActiveCfg = Release|Any CPU 
    123125        {21752123-7BD7-4B44-B512-14A963C55FD8}.Release|x64.Build.0 = Release|Any CPU 
    124         {21752123-7BD7-4B44-B512-14A963C55FD8}.Release|x86.ActiveCfg = Release|Any CPU 
    125         {21752123-7BD7-4B44-B512-14A963C55FD8}.Release|x86.Build.0 = Release|Any CPU 
    126126        {318964CF-278D-41B2-A825-B9A0D1F5D766}.Debug|Any CPU.ActiveCfg = Debug|x86 
    127127        {318964CF-278D-41B2-A825-B9A0D1F5D766}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 
    128128        {318964CF-278D-41B2-A825-B9A0D1F5D766}.Debug|Win32.ActiveCfg = Debug|x86 
    129129        {318964CF-278D-41B2-A825-B9A0D1F5D766}.Debug|x64.ActiveCfg = Debug|x64 
    130         {318964CF-278D-41B2-A825-B9A0D1F5D766}.Debug|x86.ActiveCfg = Debug|x86 
    131130        {318964CF-278D-41B2-A825-B9A0D1F5D766}.Release|Any CPU.ActiveCfg = Release|x86 
    132131        {318964CF-278D-41B2-A825-B9A0D1F5D766}.Release|Mixed Platforms.ActiveCfg = Release|x86 
    133         {318964CF-278D-41B2-A825-B9A0D1F5D766}.Release|Mixed Platforms.Build.0 = Release|x86 
    134         {318964CF-278D-41B2-A825-B9A0D1F5D766}.Release|Win32.ActiveCfg = Release|x64 
     132        {318964CF-278D-41B2-A825-B9A0D1F5D766}.Release|Win32.ActiveCfg = Release|x86 
     133        {318964CF-278D-41B2-A825-B9A0D1F5D766}.Release|Win32.Build.0 = Release|x86 
    135134        {318964CF-278D-41B2-A825-B9A0D1F5D766}.Release|x64.ActiveCfg = Release|x64 
    136135        {318964CF-278D-41B2-A825-B9A0D1F5D766}.Release|x64.Build.0 = Release|x64 
    137         {318964CF-278D-41B2-A825-B9A0D1F5D766}.Release|x86.ActiveCfg = Release|x86 
    138         {318964CF-278D-41B2-A825-B9A0D1F5D766}.Release|x86.Build.0 = Release|x86 
    139136        {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Debug|Any CPU.ActiveCfg = Debug|Win32 
    140137        {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 
    141         {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Debug|Mixed Platforms.Build.0 = Debug|Win32 
    142138        {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Debug|Win32.ActiveCfg = Debug|Win32 
    143         {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Debug|Win32.Build.0 = Debug|Win32 
    144139        {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Debug|x64.ActiveCfg = Debug|Win32 
    145         {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Debug|x86.ActiveCfg = Debug|Win32 
    146140        {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Release|Any CPU.ActiveCfg = Release|Win32 
    147141        {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Release|Mixed Platforms.ActiveCfg = Release|Win32 
    148         {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Release|Mixed Platforms.Build.0 = Release|Win32 
    149142        {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Release|Win32.ActiveCfg = Release|Win32 
    150143        {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Release|Win32.Build.0 = Release|Win32 
    151144        {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Release|x64.ActiveCfg = Release|Win32 
    152         {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Release|x86.ActiveCfg = Release|Win32 
    153         {4F6CD250-0A08-4DB8-8E07-848E4FF01C21}.Release|x86.Build.0 = Release|Win32 
    154145        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Debug|Any CPU.ActiveCfg = Debug|Win32 
    155146        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 
    156         {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Debug|Mixed Platforms.Build.0 = Debug|Win32 
    157147        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Debug|Win32.ActiveCfg = Debug|Win32 
    158148        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Debug|Win32.Build.0 = Debug|Win32 
    159149        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Debug|x64.ActiveCfg = Debug|x64 
    160150        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Debug|x64.Build.0 = Debug|x64 
    161         {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Debug|x86.ActiveCfg = Debug|Win32 
    162         {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Debug|x86.Build.0 = Debug|Win32 
    163151        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Release|Any CPU.ActiveCfg = Release|Win32 
    164152        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Release|Mixed Platforms.ActiveCfg = Release|Win32 
    165         {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Release|Mixed Platforms.Build.0 = Release|Win32 
    166153        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Release|Win32.ActiveCfg = Release|Win32 
    167154        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Release|Win32.Build.0 = Release|Win32 
    168155        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Release|x64.ActiveCfg = Release|x64 
    169156        {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Release|x64.Build.0 = Release|x64 
    170         {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Release|x86.ActiveCfg = Release|Win32 
    171         {738F455B-2220-4F8F-B87F-DA93F0B0F1BA}.Release|x86.Build.0 = Release|Win32 
    172157        {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Debug|Any CPU.ActiveCfg = Debug|Win32 
    173158        {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 
     
    177162        {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Debug|x64.ActiveCfg = Debug|x64 
    178163        {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Debug|x64.Build.0 = Debug|x64 
    179         {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Debug|x86.ActiveCfg = Debug|Win32 
    180         {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Debug|x86.Build.0 = Debug|Win32 
    181164        {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Release|Any CPU.ActiveCfg = Release|Win32 
    182165        {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Release|Mixed Platforms.ActiveCfg = Release|x64 
     
    186169        {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Release|x64.ActiveCfg = Release|x64 
    187170        {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Release|x64.Build.0 = Release|x64 
    188         {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Release|x86.ActiveCfg = Release|Win32 
    189         {BCFE7D20-FC82-4BBE-BFE4-7B635D70D238}.Release|x86.Build.0 = Release|Win32 
     171        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Debug|Any CPU.ActiveCfg = Debug|Win32 
     172        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 
     173        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Debug|Mixed Platforms.Build.0 = Debug|x64 
     174        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Debug|Win32.ActiveCfg = Debug|Win32 
     175        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Debug|Win32.Build.0 = Debug|Win32 
     176        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Debug|x64.ActiveCfg = Debug|x64 
     177        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Debug|x64.Build.0 = Debug|x64 
     178        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Release|Any CPU.ActiveCfg = Release|Win32 
     179        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Release|Mixed Platforms.ActiveCfg = Release|x64 
     180        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Release|Mixed Platforms.Build.0 = Release|x64 
     181        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Release|Win32.ActiveCfg = Release|Win32 
     182        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Release|Win32.Build.0 = Release|Win32 
     183        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Release|x64.ActiveCfg = Release|x64 
     184        {70FB61E5-3F8C-4B6C-8D1B-E08FD8B957C1}.Release|x64.Build.0 = Release|x64 
    190185    EndGlobalSection 
    191186    GlobalSection(SolutionProperties) = preSolution 
Note: See TracChangeset for help on using the changeset viewer.