📄 rapi.cs
字号:
// Rapi.cs - P/Invoke wrappers for RAPI functions
//
// Generated by PInvoke Wizard (v 1.0) from The Paul Yao Company http://www.paulyao.com
//
// Code from _Programming the .NET Compact Framework with C#_
// and _Programming the .NET Compact Framework with VB_
// (c) Copyright 2002-2004 Paul Yao and David Durant.
// All rights reserved.
using System;
using System.Runtime.InteropServices;
namespace YaoDurant.Win32
{
/// <summary>
/// Rapi - Wrapper for ActiveSync RAPI functions.
/// </summary>
public struct Rapi
{
public const string DllName = "rapi.dll";
public const int MAX_PATH = 260;
public const int S_OK = 0;
public const int ERROR_SUCCESS = 0;
public const int ERROR_NO_MORE_ITEMS = 259;
public const int E_FAIL = unchecked((int)0x80004005);
public const int RAPI_TRUE = 1;
public const int RAPI_FALSE = 0;
public static IntPtr INVALID_HANDLE_VALUE =
new IntPtr(unchecked((int)0xffffffff));
// Registry values.
public static IntPtr HKEY_CLASSES_ROOT =
new IntPtr(unchecked((int)0x80000000));
public static IntPtr HKEY_CURRENT_USER =
new IntPtr(unchecked((int)0x80000001));
public static IntPtr HKEY_LOCAL_MACHINE =
new IntPtr(unchecked((int)0x80000002));
public static IntPtr HKEY_USERS =
new IntPtr(unchecked((int)0x80000003));
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode,Pack=4)]
public struct CE_FIND_DATA
{
public int dwFileAttributes;
public FILETIME ftCreationTime;
public FILETIME ftLastAccessTime;
public FILETIME ftLastWriteTime;
public int nFileSizeHigh;
public int nFileSizeLow;
public int dwOID;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=MAX_PATH)]
public string cFileName;
};
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Unicode,Pack=4)]
public struct CEPROPID
{
CEVT type;
short id;
}
public enum FAF
{
FAF_ATTRIBUTES = 0x01,
FAF_CREATION_TIME = 0x02,
FAF_LASTACCESS_TIME = 0x04,
FAF_LASTWRITE_TIME = 0x08,
FAF_SIZE_HIGH = 0x10,
FAF_SIZE_LOW = 0x20,
FAF_OID = 0x40,
FAF_NAME = 0x80,
FAF_FLAG_COUNT = 8,
FAF_ATTRIB_CHILDREN = 0x01000,
FAF_ATTRIB_NO_HIDDEN = 0x02000,
FAF_FOLDERS_ONLY = 0x04000,
FAF_NO_HIDDEN_SYS_ROMMODULES = 0x08000,
FAF_GETTARGET = 0x10000,
}
public enum FAD
{
FAD_OID = 0x01,
FAD_FLAGS = 0x02,
FAD_NAME = 0x04,
FAD_TYPE = 0x08,
FAD_NUM_RECORDS = 0x10,
FAD_NUM_SORT_ORDER = 0x20,
FAD_SIZE = 0x40,
FAD_LAST_MODIFIED = 0x80,
FAD_SORT_SPECS = 0x100,
FAD_FLAG_COUNT = 9,
}
public enum FILE_ATTRIBUTE
{
FILE_ATTRIBUTE_HAS_CHILDREN = 0x00010000,
FILE_ATTRIBUTE_SHORTCUT = 0x00020000,
FILE_ATTRIBUTE_READONLY = 0x00000001,
FILE_ATTRIBUTE_HIDDEN = 0x00000002,
FILE_ATTRIBUTE_SYSTEM = 0x00000004,
FILE_ATTRIBUTE_DIRECTORY = 0x00000010,
FILE_ATTRIBUTE_ARCHIVE = 0x00000020,
FILE_ATTRIBUTE_INROM = 0x00000040,
FILE_ATTRIBUTE_ENCRYPTED = 0x00000040,
FILE_ATTRIBUTE_NORMAL = 0x00000080,
FILE_ATTRIBUTE_TEMPORARY = 0x00000100,
FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200,
FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400,
FILE_ATTRIBUTE_COMPRESSED = 0x00000800,
FILE_ATTRIBUTE_OFFLINE = 0x00001000,
FILE_ATTRIBUTE_ROMSTATICREF = 0x00001000,
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000,
FILE_ATTRIBUTE_ROMMODULE = 0x00002000,
}
public enum RAPI_ERROR
{
ERROR_FILE_NOT_FOUND = 2,
ERROR_PATH_NOT_FOUND = 3,
ERROR_TOO_MANY_OPEN_FILES = 4,
ERROR_ACCESS_DENIED = 5,
ERROR_INVALID_HANDLE = 6,
}
public enum RAPISTREAMFLAG
{
STREAM_TIMEOUT_READ,
};
public enum REGTYPE
{
REG_NONE = 0,
REG_SZ = 1,
REG_EXPAND_SZ = 2,
REG_BINARY = 3,
REG_DWORD = 4,
REG_DWORD_LITTLE_ENDIAN = 4,
REG_DWORD_BIG_ENDIAN = 5,
REG_LINK = 6,
REG_MULTI_SZ = 7,
REG_RESOURCE_LIST = 8
}
public interface ISequentialStream
{
int Read(ref byte pv, int cb, ref int pcbRead);
int Write(ref byte pv,int cb, ref int pcbWritten);
}
public interface IStream : ISequentialStream
{
int Seek(long dlibMove, int dwOrigin, ref ulong plibNewPosition);
int SetSize(ulong libNewSize);
int CopyTo(IStream pstm, ulong cb, ref ulong pcbRead, ref ulong pcbWritten);
int Commit(int grfCommitFlags);
int Revert();
int LockRegion(ulong libOffset, ulong cb, int dwLockType);
int UnlockRegion(ulong libOffset, ulong cb, int dwLockType);
int Stat(ref STATSTG pstatstg, int grfStatFlag);
int Clone(ref IStream ppstm);
}
public interface IRAPIStream : IStream
{
int SetRapiStat(int dwValue);
int GetRapiStat(ref int pdwValue);
};
[StructLayout(LayoutKind.Sequential,Pack=4)]
public struct STORE_INFORMATION
{
int dwStoreSize;
int dwFreeSize;
};
[StructLayout(LayoutKind.Sequential,Pack=4)]
public struct CEGUID
{
int Data1;
int Data2;
int Data3;
int Data4;
};
[StructLayout(LayoutKind.Sequential,Pack=4)]
public struct CENOTIFICATION
{
int dwSize;
int dwParam;
int uType;
CEGUID guid;
int oid;
int oidParent;
};
public const int CEDB_EXNOTIFICATION = 0x00000001;
[StructLayout(LayoutKind.Sequential,Pack=4)]
public struct CENOTIFYREQUEST
{
int dwSize;
IntPtr hwnd;
int dwFlags;
IntPtr hHeap;
int dwParam;
};
[StructLayout(LayoutKind.Sequential,Pack=4,CharSet=CharSet.Unicode)]
public struct CEFILEINFO
{
int dwAttributes;
int oidParent;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=MAX_PATH)]
string szFileName;
FILETIME ftLastChanged;
int dwLength;
};
[StructLayout(LayoutKind.Sequential,Pack=4,CharSet=CharSet.Unicode)]
public struct CEDIRINFO
{
int dwAttributes;
int oidParent;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=MAX_PATH)]
string szDirName;
};
[StructLayout(LayoutKind.Sequential,Pack=4)]
public struct CERECORDINFO
{
int oidParent;
};
public enum CEDB_SORT
{
CEDB_SORT_DESCENDING = 0x00000001,
CEDB_SORT_CASEINSENSITIVE = 0x00000002,
CEDB_SORT_UNKNOWNFIRST = 0x00000004,
CEDB_SORT_GENERICORDER = 0x00000008,
}
[StructLayout(LayoutKind.Sequential,Pack=4)]
public struct SORTORDERSPEC
{
public int propid;
public int dwFlags;
};
public const int CEDB_MAXDBASENAMELEN = 32;
public const int CEDB_MAXSORTORDER = 4;
public enum CEDB
{
CEDB_VALIDNAME = 0x0001,
CEDB_VALIDTYPE = 0x0002,
CEDB_VALIDSORTSPEC = 0x0004,
CEDB_VALIDMODTIME = 0x0008,
CEDB_VALIDDBFLAGS = 0x0010,
CEDB_VALIDCREATE = CEDB_VALIDNAME|CEDB_VALIDTYPE|CEDB_VALIDSORTSPEC|CEDB_VALIDDBFLAGS,
CEDB_NOCOMPRESS = 0x00010000,
}
[StructLayout(LayoutKind.Sequential,Pack=4,CharSet=CharSet.Unicode)]
public struct CEDBASEINFO
{
public int dwFlags;
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=CEDB_MAXDBASENAMELEN)]
public string szDbaseName;
public int dwDbaseType;
public short wNumRecords;
public short wNumSortOrder;
public int dwSize;
public FILETIME ftLastModified;
// public SORTORDERSPEC [] rgSortSpecs;
// Try #2 -- This works.
public SORTORDERSPEC rgSortSpec1;
public SORTORDERSPEC rgSortSpec2;
public SORTORDERSPEC rgSortSpec3;
public SORTORDERSPEC rgSortSpec4;
#if false
// public SORTORDERSPEC [] rgSortSpecs;
// Try #3: This works also - but not as nice.
public int Sort1_propid;
public int Sort1_dwFlags;
public int Sort2_propid;
public int Sort2_dwFlags;
public int Sort3_propid;
public int Sort3_dwFlags;
public int Sort4_propid;
public int Sort4_dwFlags;
// public SORTORDERSPEC [] rgSortSpecs;
// Try #1: The original - DESKTOP P/Invoke cannot deal with this
// Desktop P/Invoke cannot deal with this -
// problem with structure array in a structure in a structure?!?
[ MarshalAs( UnmanagedType.ByValArray, SizeConst=CEDB_MAXSORTORDER)]
public SORTORDERSPEC [] rgSortSpecs;
#endif
};
[StructLayout(LayoutKind.Sequential,Pack=4,CharSet=CharSet.Unicode)]
public struct CEDB_FIND_DATA
{
public int OidDb;
public CEDBASEINFO DbInfo;
};
public enum OBJTYPE
{
OBJTYPE_INVALID = 0,
OBJTYPE_FILE = 1,
OBJTYPE_DIRECTORY = 2,
OBJTYPE_DATABASE = 3,
OBJTYPE_RECORD = 4,
}
[StructLayout(LayoutKind.Sequential,Pack=4,CharSet=CharSet.Unicode)]
public struct CEOIDINFO
{
short wObjType;
short wPad;
[StructLayout(LayoutKind.Explicit)]
public struct _NESTED_CEOIDINFO_UNION
{
[FieldOffset(0)] CEFILEINFO infFile;
[FieldOffset(0)] CEDIRINFO infDirectory;
[FieldOffset(0)] CEDBASEINFO infDatabase;
[FieldOffset(0)] CERECORDINFO infRecord;
};
};
public const int CEDB_AUTOINCREMENT = 0x00000001;
public enum CEDB_SEEK
{
CEDB_SEEK_CEOID = 0x00000001,
CEDB_SEEK_BEGINNING = 0x00000002,
CEDB_SEEK_END = 0x00000004,
CEDB_SEEK_CURRENT = 0x00000008,
CEDB_SEEK_VALUESMALLER = 0x00000010,
CEDB_SEEK_VALUEFIRSTEQUAL = 0x00000020,
CEDB_SEEK_VALUEGREATER = 0x00000040,
CEDB_SEEK_VALUENEXTEQUAL = 0x00000080,
}
[StructLayout(LayoutKind.Sequential,Pack=4)]
public struct CEBLOB
{
int dwCount;
Byte [] lpb;
};
public enum CEVT : short
{
CEVT_I2 = 2,
CEVT_UI2 = 18,
CEVT_I4 = 3,
CEVT_UI4 = 19,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -