File: NativeMethods.cs

package info (click to toggle)
mysql-connector-net 6.4.3-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 6,160 kB
  • ctags: 8,552
  • sloc: cs: 63,689; xml: 7,505; sql: 345; makefile: 50; ansic: 40
file content (156 lines) | stat: -rw-r--r-- 6,026 bytes parent folder | download | duplicates (2)
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
// Copyright (c) 2004-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc.
//
// MySQL Connector/NET is licensed under the terms of the GPLv2
// <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most 
// MySQL Connectors. There are special exceptions to the terms and 
// conditions of the GPLv2 as it is applied to this software, see the 
// FLOSS License Exception
// <http://www.mysql.com/about/legal/licensing/foss-exception.html>.
//
// This program is free software; you can redistribute it and/or modify 
// it under the terms of the GNU General Public License as published 
// by the Free Software Foundation; version 2 of the License.
//
// This program is distributed in the hope that it will be useful, but 
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 
// for more details.
//
// You should have received a copy of the GNU General Public License along 
// with this program; if not, write to the Free Software Foundation, Inc., 
// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA

using System;
using System.Runtime.InteropServices;
using System.Threading;

namespace MySql.Data.Common
{
	internal class NativeMethods
	{
		// Keep the compiler from generating a default ctor
		private NativeMethods() 
		{
		}

        //Constants for dwDesiredAccess:
        public const UInt32 GENERIC_READ = 0x80000000;
        public const UInt32 GENERIC_WRITE = 0x40000000;

        //Constants for return value:
        public const Int32 INVALIDpipeHandle_VALUE = -1;

        //Constants for dwFlagsAndAttributes:
        public const UInt32 FILE_FLAG_OVERLAPPED = 0x40000000;
        public const UInt32 FILE_FLAG_NO_BUFFERING = 0x20000000;

        //Constants for dwCreationDisposition:
        public const UInt32 OPEN_EXISTING = 3;

		[StructLayout(LayoutKind.Sequential)]
		public class SecurityAttributes 
		{
			public SecurityAttributes() 
			{
				Length = Marshal.SizeOf(typeof(SecurityAttributes));
			}
			public int Length;
			public IntPtr securityDescriptor = IntPtr.Zero;
			public bool inheritHandle;
		}

		[DllImport("Kernel32", CharSet=CharSet.Unicode)]
		static extern public IntPtr CreateFile(
            String fileName,
			uint desiredAccess,
			uint shareMode, 
			SecurityAttributes securityAttributes,
			uint creationDisposition,
			uint flagsAndAttributes,
			uint templateFile);

		[return:MarshalAs(UnmanagedType.Bool)]
		[DllImport("kernel32.dll", EntryPoint="PeekNamedPipe", SetLastError=true)]
		static extern public bool PeekNamedPipe(IntPtr handle,
			byte[] buffer, 
			uint nBufferSize, 
			ref uint bytesRead,
			ref uint bytesAvail, 
			ref uint BytesLeftThisMessage);

		[return:MarshalAs(UnmanagedType.Bool)]
		[DllImport("kernel32.dll", SetLastError=true)]
        static extern public bool ReadFile(IntPtr hFile, [Out] byte[] lpBuffer, uint nNumberOfBytesToRead,
			out uint lpNumberOfBytesRead, IntPtr lpOverlapped);

		[return:MarshalAs(UnmanagedType.Bool)]
		[DllImport("Kernel32")]
        public static extern bool WriteFile(IntPtr hFile, [In]byte[] buffer,
			uint numberOfBytesToWrite, out uint numberOfBytesWritten, IntPtr lpOverlapped);

		[return:MarshalAs(UnmanagedType.Bool)]
		[DllImport("kernel32.dll", SetLastError=true)]
		public static extern bool CloseHandle(IntPtr handle);

        [return: MarshalAs(UnmanagedType.Bool)]
        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool CancelIo(IntPtr handle);

		[return:MarshalAs(UnmanagedType.Bool)]
		[DllImport("kernel32.dll", SetLastError=true)]
		public static extern bool FlushFileBuffers(IntPtr handle);

        [DllImport("kernel32.dll", CharSet=CharSet.Unicode)]
        public static extern IntPtr OpenEvent(uint dwDesiredAccess,
            [MarshalAs(UnmanagedType.Bool)]bool bInheritHandle,
            string lpName);

        [DllImport("kernel32.dll", CharSet=CharSet.Unicode)]
        public static extern IntPtr OpenFileMapping(uint dwDesiredAccess,
            [MarshalAs(UnmanagedType.Bool)]bool bInheritHandle,
            string lpName);

        [DllImport("kernel32.dll")]
        public static extern IntPtr MapViewOfFile(IntPtr hFileMappingObject, uint
            dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow,
            IntPtr dwNumberOfBytesToMap);

        [DllImport("kernel32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool UnmapViewOfFile(IntPtr lpBaseAddress);

        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern int FlushViewOfFile(IntPtr address, uint numBytes);

        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool WaitNamedPipe(string namedPipeName, uint timeOut);
		#region Winsock functions

		// SOcket routines
		[DllImport("ws2_32.dll", SetLastError=true)]
		static extern public IntPtr socket(int af, int type, int protocol);

		[DllImport("ws2_32.dll", SetLastError=true)]
		static extern public int ioctlsocket(IntPtr socket, uint cmd, ref UInt32 arg);

		[DllImport("ws2_32.dll", SetLastError=true)]
		public static extern int WSAIoctl(IntPtr s, uint dwIoControlCode, byte[] inBuffer, uint cbInBuffer,
			byte[] outBuffer, uint cbOutBuffer, IntPtr lpcbBytesReturned, IntPtr lpOverlapped,
			IntPtr lpCompletionRoutine);

		[DllImport("ws2_32.dll", SetLastError=true)]
		static extern public int WSAGetLastError();

		[DllImport("ws2_32.dll", SetLastError=true)]
		static extern public int connect(IntPtr socket, byte[] addr, int addrlen);

		[DllImport("ws2_32.dll", SetLastError=true)]
		static extern public int recv(IntPtr socket, byte[] buff, int len, int flags);

		[DllImport("ws2_32.Dll", SetLastError=true)]
		static extern public int send(IntPtr socket, byte[] buff, int len, int flags);

		#endregion

	}
}