mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-08 04:52:10 -05:00
src: dotnet: WIP
This commit is contained in:
parent
89324d2327
commit
81bc200fe7
@ -149,13 +149,11 @@ namespace Fsp.Interop
|
|||||||
internal delegate Int32 GetVolumeInfo(
|
internal delegate Int32 GetVolumeInfo(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
out VolumeInfo VolumeInfo);
|
out VolumeInfo VolumeInfo);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 SetVolumeLabel(
|
internal delegate Int32 SetVolumeLabel(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
[MarshalAs(UnmanagedType.LPWStr)] String VolumeLabel,
|
[MarshalAs(UnmanagedType.LPWStr)] String VolumeLabel,
|
||||||
out VolumeInfo VolumeInfo);
|
out VolumeInfo VolumeInfo);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 GetSecurityByName(
|
internal delegate Int32 GetSecurityByName(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -163,7 +161,6 @@ namespace Fsp.Interop
|
|||||||
out UInt32 PFileAttributes/* or ReparsePointIndex */,
|
out UInt32 PFileAttributes/* or ReparsePointIndex */,
|
||||||
IntPtr SecurityDescriptor,
|
IntPtr SecurityDescriptor,
|
||||||
out UIntPtr PSecurityDescriptorSize);
|
out UIntPtr PSecurityDescriptorSize);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 Create(
|
internal delegate Int32 Create(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -175,7 +172,6 @@ namespace Fsp.Interop
|
|||||||
UInt64 AllocationSize,
|
UInt64 AllocationSize,
|
||||||
IntPtr PFileContext,
|
IntPtr PFileContext,
|
||||||
out FileInfo FileInfo);
|
out FileInfo FileInfo);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 Open(
|
internal delegate Int32 Open(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -184,7 +180,6 @@ namespace Fsp.Interop
|
|||||||
UInt32 GrantedAccess,
|
UInt32 GrantedAccess,
|
||||||
IntPtr PFileContext,
|
IntPtr PFileContext,
|
||||||
out FileInfo FileInfo);
|
out FileInfo FileInfo);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 Overwrite(
|
internal delegate Int32 Overwrite(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -193,19 +188,16 @@ namespace Fsp.Interop
|
|||||||
Boolean ReplaceFileAttributes,
|
Boolean ReplaceFileAttributes,
|
||||||
UInt64 AllocationSize,
|
UInt64 AllocationSize,
|
||||||
out FileInfo FileInfo);
|
out FileInfo FileInfo);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate void Cleanup(
|
internal delegate void Cleanup(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
IntPtr FileContext,
|
IntPtr FileContext,
|
||||||
[MarshalAs(UnmanagedType.LPWStr)] String FileName,
|
[MarshalAs(UnmanagedType.LPWStr)] String FileName,
|
||||||
UInt32 Flags);
|
UInt32 Flags);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate void Close(
|
internal delegate void Close(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
IntPtr FileContext);
|
IntPtr FileContext);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 Read(
|
internal delegate Int32 Read(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -214,7 +206,6 @@ namespace Fsp.Interop
|
|||||||
UInt64 Offset,
|
UInt64 Offset,
|
||||||
UInt32 Length,
|
UInt32 Length,
|
||||||
out UInt32 PBytesTransferred);
|
out UInt32 PBytesTransferred);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 Write(
|
internal delegate Int32 Write(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -226,19 +217,16 @@ namespace Fsp.Interop
|
|||||||
Boolean ConstrainedIo,
|
Boolean ConstrainedIo,
|
||||||
out UInt32 PBytesTransferred,
|
out UInt32 PBytesTransferred,
|
||||||
out FileInfo FileInfo);
|
out FileInfo FileInfo);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 Flush(
|
internal delegate Int32 Flush(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
IntPtr FileContext,
|
IntPtr FileContext,
|
||||||
out FileInfo FileInfo);
|
out FileInfo FileInfo);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 GetFileInfo(
|
internal delegate Int32 GetFileInfo(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
IntPtr FileContext,
|
IntPtr FileContext,
|
||||||
out FileInfo FileInfo);
|
out FileInfo FileInfo);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 SetBasicInfo(
|
internal delegate Int32 SetBasicInfo(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -249,7 +237,6 @@ namespace Fsp.Interop
|
|||||||
UInt64 LastWriteTime,
|
UInt64 LastWriteTime,
|
||||||
UInt64 ChangeTime,
|
UInt64 ChangeTime,
|
||||||
out FileInfo FileInfo);
|
out FileInfo FileInfo);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 SetFileSize(
|
internal delegate Int32 SetFileSize(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -257,13 +244,11 @@ namespace Fsp.Interop
|
|||||||
UInt64 NewSize,
|
UInt64 NewSize,
|
||||||
Boolean SetAllocationSize,
|
Boolean SetAllocationSize,
|
||||||
out FileInfo FileInfo);
|
out FileInfo FileInfo);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 CanDelete(
|
internal delegate Int32 CanDelete(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
IntPtr FileContext,
|
IntPtr FileContext,
|
||||||
[MarshalAs(UnmanagedType.LPWStr)] String FileName);
|
[MarshalAs(UnmanagedType.LPWStr)] String FileName);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 Rename(
|
internal delegate Int32 Rename(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -271,21 +256,18 @@ namespace Fsp.Interop
|
|||||||
[MarshalAs(UnmanagedType.LPWStr)] String FileName,
|
[MarshalAs(UnmanagedType.LPWStr)] String FileName,
|
||||||
[MarshalAs(UnmanagedType.LPWStr)] String NewFileName,
|
[MarshalAs(UnmanagedType.LPWStr)] String NewFileName,
|
||||||
Boolean ReplaceIfExists);
|
Boolean ReplaceIfExists);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 GetSecurity(
|
internal delegate Int32 GetSecurity(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
IntPtr FileContext,
|
IntPtr FileContext,
|
||||||
IntPtr SecurityDescriptor,
|
IntPtr SecurityDescriptor,
|
||||||
out UIntPtr PSecurityDescriptorSize);
|
out UIntPtr PSecurityDescriptorSize);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 SetSecurity(
|
internal delegate Int32 SetSecurity(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
IntPtr FileContext,
|
IntPtr FileContext,
|
||||||
UInt32 SecurityInformation,
|
UInt32 SecurityInformation,
|
||||||
IntPtr ModificationDescriptor);
|
IntPtr ModificationDescriptor);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 ReadDirectory(
|
internal delegate Int32 ReadDirectory(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -295,7 +277,6 @@ namespace Fsp.Interop
|
|||||||
IntPtr Buffer,
|
IntPtr Buffer,
|
||||||
UInt32 Length,
|
UInt32 Length,
|
||||||
out UInt32 PBytesTransferred);
|
out UInt32 PBytesTransferred);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 ResolveReparsePoints(
|
internal delegate Int32 ResolveReparsePoints(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -305,7 +286,6 @@ namespace Fsp.Interop
|
|||||||
out IoStatusBlock PIoStatus,
|
out IoStatusBlock PIoStatus,
|
||||||
IntPtr Buffer,
|
IntPtr Buffer,
|
||||||
out UIntPtr PSize);
|
out UIntPtr PSize);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 GetReparsePoint(
|
internal delegate Int32 GetReparsePoint(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -313,7 +293,6 @@ namespace Fsp.Interop
|
|||||||
[MarshalAs(UnmanagedType.LPWStr)] String FileName,
|
[MarshalAs(UnmanagedType.LPWStr)] String FileName,
|
||||||
IntPtr Buffer,
|
IntPtr Buffer,
|
||||||
out UIntPtr PSize);
|
out UIntPtr PSize);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 SetReparsePoint(
|
internal delegate Int32 SetReparsePoint(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -321,7 +300,6 @@ namespace Fsp.Interop
|
|||||||
[MarshalAs(UnmanagedType.LPWStr)] String FileName,
|
[MarshalAs(UnmanagedType.LPWStr)] String FileName,
|
||||||
IntPtr Buffer,
|
IntPtr Buffer,
|
||||||
UIntPtr Size);
|
UIntPtr Size);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 DeleteReparsePoint(
|
internal delegate Int32 DeleteReparsePoint(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -329,7 +307,6 @@ namespace Fsp.Interop
|
|||||||
[MarshalAs(UnmanagedType.LPWStr)] String FileName,
|
[MarshalAs(UnmanagedType.LPWStr)] String FileName,
|
||||||
IntPtr Buffer,
|
IntPtr Buffer,
|
||||||
UIntPtr Size);
|
UIntPtr Size);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||||
internal delegate Int32 GetStreamInfo(
|
internal delegate Int32 GetStreamInfo(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
@ -337,7 +314,6 @@ namespace Fsp.Interop
|
|||||||
IntPtr Buffer,
|
IntPtr Buffer,
|
||||||
UInt32 Length,
|
UInt32 Length,
|
||||||
out UInt32 PBytesTransferred);
|
out UInt32 PBytesTransferred);
|
||||||
|
|
||||||
internal unsafe fixed long/*IntPtr*/ Reserved[40];
|
internal unsafe fixed long/*IntPtr*/ Reserved[40];
|
||||||
/* NTSTATUS (*Reserved[40])(); */
|
/* NTSTATUS (*Reserved[40])(); */
|
||||||
}
|
}
|
||||||
@ -345,59 +321,51 @@ namespace Fsp.Interop
|
|||||||
[SuppressUnmanagedCodeSecurity]
|
[SuppressUnmanagedCodeSecurity]
|
||||||
internal static class Api
|
internal static class Api
|
||||||
{
|
{
|
||||||
|
/* const */
|
||||||
internal const String DllName = "winfsp.dll";
|
internal const String DllName = "winfsp.dll";
|
||||||
|
|
||||||
|
/* API */
|
||||||
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
||||||
internal static extern Int32 FspFileSystemPreflight(
|
internal static extern Int32 FspFileSystemPreflight(
|
||||||
[MarshalAs(UnmanagedType.LPWStr)] String DevicePath,
|
[MarshalAs(UnmanagedType.LPWStr)] String DevicePath,
|
||||||
[MarshalAs(UnmanagedType.LPWStr)] String MountPoint);
|
[MarshalAs(UnmanagedType.LPWStr)] String MountPoint);
|
||||||
|
|
||||||
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
||||||
internal static extern Int32 FspFileSystemCreate(
|
internal static extern Int32 FspFileSystemCreate(
|
||||||
[MarshalAs(UnmanagedType.LPWStr)] String DevicePath,
|
[MarshalAs(UnmanagedType.LPWStr)] String DevicePath,
|
||||||
ref VolumeParams VolumeParams,
|
ref VolumeParams VolumeParams,
|
||||||
ref FileSystemInterface Interface,
|
ref FileSystemInterface Interface,
|
||||||
out IntPtr PFileSystem);
|
out IntPtr PFileSystem);
|
||||||
|
|
||||||
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
||||||
internal static extern void FspFileSystemDelete(IntPtr FileSystem);
|
internal static extern void FspFileSystemDelete(
|
||||||
|
IntPtr FileSystem);
|
||||||
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
||||||
internal static extern Int32 FspFileSystemSetMountPoint(
|
internal static extern Int32 FspFileSystemSetMountPoint(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
[MarshalAs(UnmanagedType.LPWStr)] String MountPoint);
|
[MarshalAs(UnmanagedType.LPWStr)] String MountPoint);
|
||||||
|
|
||||||
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
||||||
internal static extern Int32 FspFileSystemSetMountPointEx(
|
internal static extern Int32 FspFileSystemSetMountPointEx(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
[MarshalAs(UnmanagedType.LPWStr)] String MountPoint,
|
[MarshalAs(UnmanagedType.LPWStr)] String MountPoint,
|
||||||
IntPtr SecurityDescriptor);
|
IntPtr SecurityDescriptor);
|
||||||
|
|
||||||
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
||||||
internal static extern Int32 FspFileSystemRemoveMountPoint(
|
internal static extern Int32 FspFileSystemRemoveMountPoint(
|
||||||
IntPtr FileSystem);
|
IntPtr FileSystem);
|
||||||
|
|
||||||
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
||||||
internal static extern Int32 FspFileSystemStartDispatcher(
|
internal static extern Int32 FspFileSystemStartDispatcher(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
UInt32 ThreadCount);
|
UInt32 ThreadCount);
|
||||||
|
|
||||||
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
||||||
internal static extern Int32 FspFileSystemStopDispatcher(
|
internal static extern Int32 FspFileSystemStopDispatcher(
|
||||||
IntPtr FileSystem);
|
IntPtr FileSystem);
|
||||||
|
|
||||||
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
||||||
internal static extern Int32 FspVersion(
|
internal static extern Int32 FspVersion(
|
||||||
out UInt32 PVersion);
|
out UInt32 PVersion);
|
||||||
|
|
||||||
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
||||||
internal static extern Int32 FspNtStatusFromWin32(
|
internal static extern Int32 FspNtStatusFromWin32(
|
||||||
UInt32 Error);
|
UInt32 Error);
|
||||||
|
|
||||||
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
|
||||||
internal static extern UInt32 FspWin32FromNtStatus(
|
internal static extern UInt32 FspWin32FromNtStatus(
|
||||||
Int32 Status);
|
Int32 Status);
|
||||||
|
|
||||||
internal static unsafe Int32 FspFileSystemSetMountPointEx(
|
internal static unsafe Int32 FspFileSystemSetMountPointEx(
|
||||||
IntPtr FileSystem,
|
IntPtr FileSystem,
|
||||||
String MountPoint,
|
String MountPoint,
|
||||||
@ -413,14 +381,11 @@ namespace Fsp.Interop
|
|||||||
else
|
else
|
||||||
return FspFileSystemSetMountPointEx(FileSystem, MountPoint, IntPtr.Zero);
|
return FspFileSystemSetMountPointEx(FileSystem, MountPoint, IntPtr.Zero);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
internal static class Initializer
|
/* initialization */
|
||||||
{
|
|
||||||
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
|
[DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
|
||||||
private static extern IntPtr LoadLibraryW(
|
private static extern IntPtr LoadLibraryW(
|
||||||
[MarshalAs(UnmanagedType.LPWStr)] String DllName);
|
[MarshalAs(UnmanagedType.LPWStr)] String DllName);
|
||||||
|
|
||||||
private static Boolean Load()
|
private static Boolean Load()
|
||||||
{
|
{
|
||||||
String DllPath = null;
|
String DllPath = null;
|
||||||
@ -429,7 +394,6 @@ namespace Fsp.Interop
|
|||||||
"HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\WinFsp" :
|
"HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\WinFsp" :
|
||||||
"HKEY_LOCAL_MACHINE\\Software\\WinFsp";
|
"HKEY_LOCAL_MACHINE\\Software\\WinFsp";
|
||||||
IntPtr Module;
|
IntPtr Module;
|
||||||
|
|
||||||
Module = LoadLibraryW(DllName);
|
Module = LoadLibraryW(DllName);
|
||||||
if (IntPtr.Zero == Module)
|
if (IntPtr.Zero == Module)
|
||||||
{
|
{
|
||||||
@ -442,12 +406,7 @@ namespace Fsp.Interop
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
static Api()
|
||||||
internal static void Initialize()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static Initializer()
|
|
||||||
{
|
{
|
||||||
if (!Load())
|
if (!Load())
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user