473,799 Members | 3,350 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Is C# support load device driver?

I wrote a simple virtual device driver int15.sys, Is C# support load the
device driver from AP?
Nov 16 '05
12 13774
Richard Blewett [DevelopMentor] wrote:
DeviceIOControl is simply a way of passing "op-codes" to a kernel mode
device driver and retrieving the results. You obviously can't write a
device driver in C# but you can interrogate a device driver via pinvoke.
ok thanks for the info, Richard :)

FB

Regards

Richard Blewett - DevelopMentor
http://staff.develop.com/richardb/weblog
nntp://news.microsoft. com/microsoft.publi c.dotnet.langua ges.csharp/<xn0dnn7g
y4*******@msnew s.microsoft.com>

Richard Blewett [DevelopMentor] wrote:
> Nope, yoou can interact directly with them vice the DeviceIOControl API.
> I've done this in the past to write to area of the physical disk that

win32 > doesn't support.
>
> So I guess to be able to interact with a device driver from C# you'd have
> to P/Invoke to DeviceIOControl


(just to make it clear to me, not to nittpick ;))
But isn't this just a wrapper around Windows' device manager? There is no
way you will be able to poke into hardware without a kernel space module,
as everything is virtualized: you can't simply throw an interrupt or set an
address to a value to change some hardware's internal settings (at least
that's what I know of it).

Frans.
>
> Regards
>
> Richard Blewett - DevelopMentor
> http://staff.develop.com/richardb/weblog
>
>
>

nntp://news.microsoft. com/microsoft.publi c.dotnet.langua ges.csharp/<xn0dnlt0
z3*******@msnew s.microsoft.com> >
> Steve wrote:
>
> > I wrote a simple virtual device driver int15.sys, Is C# support load

the > > device driver from AP?
>
> Aren't drivers used by the OS (windows) ? So how did you plan to use this
> driver?

Nov 16 '05 #11

"Steve" <St***@discussi ons.microsoft.c om> wrote in message
news:82******** *************** ***********@mic rosoft.com...
All,

Thanks for the help about this issue.

Willy,

I think you answer my question, for I am new in C#, I will try figure out
how to implement based on your suggestion, really appreciated.

"Willy Denoyette [MVP]" wrote:


Steve,

I would never use C# for this, but here's a sample class that illustrates
how to manage driver loading/unloading using both PInvoke interop and WMI.

Note this is no production code, it's only meant to illustrate how to:
- load a driver.
- start the driver
- open the device
- stop the driver
- unload the driver
using C#.
usage:
Win32Driver driver = new Win32Driver(dri verName,
@"c:\\folder\\m ydriver.sys");
if (driver.LoadDev iceDriver()){
IntPtr handle = driver.OpenDevi ce();
// use device using ....DeviceIoCon trol(handle,... .) see class code for
signature
}
//unload when done
driver.UnloadDe viceDriver();


// the class file
public sealed class Win32Driver : IDisposable
{
string driverName;
string execPath;
IntPtr fileHandle;
public Win32Driver(str ing driver, string driverExecPath)
{
this.driverName = driver;
this.execPath = driverExecPath;
}
~Win32Driver()
{
// BUG - should never rely on finalizer to clean-up unmanaged resources
Dispose();
}
private void CloseStuff()
{
if(fileHandle != INVALID_HANDLE_ VALUE)
{
fileHandle = INVALID_HANDLE_ VALUE;
CloseHandle(fil eHandle);
}
}

public void Dispose()
{
CloseStuff();
GC.SuppressFina lize(this);
}

private readonly static IntPtr INVALID_HANDLE_ VALUE = new IntPtr(-1);
private const int STANDARD_RIGHTS _REQUIRED = 0x000F0000;
private const int SC_MANAGER_CONN ECT = 0x0001;
private const int SC_MANAGER_CREA TE_SERVICE = 0x0002;
private const int SC_MANAGER_ENUM ERATE_SERVICE = 0x0004;
private const int SC_MANAGER_LOCK = 0x0008;
private const int SC_MANAGER_QUER Y_LOCK_STATUS = 0x0010;
private const int SC_MANAGER_MODI FY_BOOT_CONFIG =0x0020;
private const int SC_MANAGER_ALL_ ACCESS = STANDARD_RIGHTS _REQUIRED |
SC_MANAGER_CONN ECT |
SC_MANAGER_CREA TE_SERVICE |
SC_MANAGER_ENUM ERATE_SERVICE |
SC_MANAGER_LOCK |
SC_MANAGER_QUER Y_LOCK_STATUS |
SC_MANAGER_MODI FY_BOOT_CONFIG;

private const int SERVICE_QUERY_C ONFIG = 0x0001;
private const int SERVICE_CHANGE_ CONFIG = 0x0002;
private const int SERVICE_QUERY_S TATUS = 0x0004;
private const int SERVICE_ENUMERA TE_DEPENDENTS = 0x0008;
private const int SERVICE_START = 0x0010;
private const int SERVICE_STOP = 0x0020;
private const int SERVICE_PAUSE_C ONTINUE = 0x0040;
private const int SERVICE_INTERRO GATE = 0x0080;
private const int SERVICE_USER_DE FINED_CONTROL = 0x0100;

private const int SERVICE_ALL_ACC ESS = STANDARD_RIGHTS _REQUIRED
|
SERVICE_QUERY_C ONFIG |
SERVICE_CHANGE_ CONFIG |
SERVICE_QUERY_S TATUS |
SERVICE_ENUMERA TE_DEPENDENTS |
SERVICE_START |
SERVICE_STOP |
SERVICE_PAUSE_C ONTINUE |
SERVICE_INTERRO GATE |
SERVICE_USER_DE FINED_CONTROL;

private const int SERVICE_DEMAND_ START = 0x00000003;
private const int SERVICE_KERNEL_ DRIVER = 0x00000001;
private const int SERVICE_ERROR_N ORMAL = 0x00000001;

private const uint GENERIC_READ = 0x80000000;
private const uint FILE_SHARE_READ = 1;
private const uint FILE_SHARE_WRIT E = 2;
private const uint OPEN_EXISTING = 3;
private const uint IOCTL_SHOCKMGR_ READ_ACCELEROME TER_DATA = 0x733fc;
private const int FACILITY_WIN32 = unchecked((int) 0x80070000);
private IntPtr handle = INVALID_HANDLE_ VALUE;

[DllImport("adva pi32", SetLastError = true)]
internal static extern IntPtr OpenSCManager(s tring machineName, string
databaseName, uint dwDesiredAccess );
[DllImport("adva pi32", SetLastError = true)]
internal static extern IntPtr CreateService(I ntPtr hSCManager, string
serviceName, string displayName,
uint dwDesiredAccess , uint serviceType, uint startType, uint
errorControl,
string lpBinaryPathNam e, string lpLoadOrderGrou p, string lpdwTagId,
string lpDependencies,
string lpServiceStartN ame, string lpPassword);

[DllImport("adva pi32")]
internal static extern bool CloseServiceHan dle(IntPtr handle);
[DllImport("kern el32", SetLastError = true)]
internal static extern IntPtr CreateFile(stri ng lpFileName, uint
dwDesiredAccess , uint dwShareMode, IntPtr lpSecurityAttri butes, uint
dwCreationDispo sition, uint dwFlagsAndAttri butes, IntPtr hTemplateFile);

[DllImport("kern el32")]
internal static extern void CloseHandle(Int Ptr handle);

[DllImport("kern el32", SetLastError = true)]
private static extern bool DeviceIoControl (IntPtr hDevice, uint
dwIoControlCode , IntPtr lpInBuffer, uint nInBufferSize, IntPtr lpOutBuffer,
uint nOutBufferSize, ref uint lpBytesReturned , IntPtr lpOverlapped);
internal bool LoadDeviceDrive r()
{
IntPtr scHandle = OpenSCManager(n ull, null, SC_MANAGER_ALL_ ACCESS);
if (scHandle != INVALID_HANDLE_ VALUE)
{
IntPtr hService = CreateService(s cHandle, this.driverName ,
this.driverName , SERVICE_ALL_ACC ESS
, SERVICE_KERNEL_ DRIVER, SERVICE_DEMAND_ START,SERVICE_E RROR_NORMAL
,execPath, null, null, null, null, null);
if (hService != IntPtr.Zero)
{
CloseServiceHan dle(hService); // close both handles
CloseServiceHan dle(scHandle);
// Start the driver using System.Manageme nt (WMI)
if (ExecuteSCMOper ationOnDriver(t his.driverName, "StartServi ce") == 0)
return true;
}
else
if (Marshal.GetLas tWin32Error()== 1073) // Driver/Service already in DB
{
CloseServiceHan dle(scHandle);
// Start the driver using System.Manageme nt (WMI)
if (ExecuteSCMOper ationOnDriver(t his.driverName, "StartServi ce") == 0)
return true;
}
Marshal.ThrowEx ceptionForHR(HR ESULT_FROM_WIN3 2(Marshal.GetLa stWin32Error()) );
}
return false;
}

internal bool UnloadDeviceDri ver()
{
int ret = 0;
if (fileHandle != IntPtr.Zero && fileHandle != INVALID_HANDLE_ VALUE)
{
CloseHandle(fil eHandle);
}
if ((ret = ExecuteSCMOpera tionOnDriver(dr iverName, "StopServic e")) == 0)
{
ret = ExecuteSCMOpera tionOnDriver(dr iverName, "Delete");
}
if (ret != 0)
{
return false;
}
return true;
}

private static int ExecuteSCMOpera tionOnDriver(st ring driverName, string
operation)
{
ManagementPath path = new ManagementPath( );
path.Server = ".";
path.NamespaceP ath = @"root\CIMV2 ";
path.RelativePa th = @"Win32_BaseSer vice.Name='" + driverName +"'";
using(Managemen tObject o = new ManagementObjec t(path))
{
ManagementBaseO bject outParams = o.InvokeMethod( operation,
null, null);
return Convert.ToInt32 (outParams.Prop erties["ReturnValu e"].Value);
}
}
internal IntPtr OpenDevice()
{
fileHandle = CreateFile("\\\ \.\\" + driverName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRIT E, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if(handle == INVALID_HANDLE_ VALUE)
{
Marshal.ThrowEx ceptionForHR(HR ESULT_FROM_WIN3 2(Marshal.GetLa stWin32Error()) );
}
return fileHandle;
}
private static int HRESULT_FROM_WI N32(int x)
{
return x <= 0 ? x : ((x & 0x0000FFFF) | FACILITY_WIN32) ;
}
}
Nov 16 '05 #12
Willy,

Thanks a lot, I tried your solution and used
ServiceControll er[] scServices;
scServices = ServiceControll er.GetDevices() ;

I can see my driver is loaded.

B. RGDS
Steve
"Willy Denoyette [MVP]" wrote:

"Steve" <St***@discussi ons.microsoft.c om> wrote in message
news:82******** *************** ***********@mic rosoft.com...
All,

Thanks for the help about this issue.

Willy,

I think you answer my question, for I am new in C#, I will try figure out
how to implement based on your suggestion, really appreciated.

"Willy Denoyette [MVP]" wrote:


Steve,

I would never use C# for this, but here's a sample class that illustrates
how to manage driver loading/unloading using both PInvoke interop and WMI.

Note this is no production code, it's only meant to illustrate how to:
- load a driver.
- start the driver
- open the device
- stop the driver
- unload the driver
using C#.
usage:
Win32Driver driver = new Win32Driver(dri verName,
@"c:\\folder\\m ydriver.sys");
if (driver.LoadDev iceDriver()){
IntPtr handle = driver.OpenDevi ce();
// use device using ....DeviceIoCon trol(handle,... .) see class code for
signature
}
//unload when done
driver.UnloadDe viceDriver();


// the class file
public sealed class Win32Driver : IDisposable
{
string driverName;
string execPath;
IntPtr fileHandle;
public Win32Driver(str ing driver, string driverExecPath)
{
this.driverName = driver;
this.execPath = driverExecPath;
}
~Win32Driver()
{
// BUG - should never rely on finalizer to clean-up unmanaged resources
Dispose();
}
private void CloseStuff()
{
if(fileHandle != INVALID_HANDLE_ VALUE)
{
fileHandle = INVALID_HANDLE_ VALUE;
CloseHandle(fil eHandle);
}
}

public void Dispose()
{
CloseStuff();
GC.SuppressFina lize(this);
}

private readonly static IntPtr INVALID_HANDLE_ VALUE = new IntPtr(-1);
private const int STANDARD_RIGHTS _REQUIRED = 0x000F0000;
private const int SC_MANAGER_CONN ECT = 0x0001;
private const int SC_MANAGER_CREA TE_SERVICE = 0x0002;
private const int SC_MANAGER_ENUM ERATE_SERVICE = 0x0004;
private const int SC_MANAGER_LOCK = 0x0008;
private const int SC_MANAGER_QUER Y_LOCK_STATUS = 0x0010;
private const int SC_MANAGER_MODI FY_BOOT_CONFIG =0x0020;
private const int SC_MANAGER_ALL_ ACCESS = STANDARD_RIGHTS _REQUIRED |
SC_MANAGER_CONN ECT |
SC_MANAGER_CREA TE_SERVICE |
SC_MANAGER_ENUM ERATE_SERVICE |
SC_MANAGER_LOCK |
SC_MANAGER_QUER Y_LOCK_STATUS |
SC_MANAGER_MODI FY_BOOT_CONFIG;

private const int SERVICE_QUERY_C ONFIG = 0x0001;
private const int SERVICE_CHANGE_ CONFIG = 0x0002;
private const int SERVICE_QUERY_S TATUS = 0x0004;
private const int SERVICE_ENUMERA TE_DEPENDENTS = 0x0008;
private const int SERVICE_START = 0x0010;
private const int SERVICE_STOP = 0x0020;
private const int SERVICE_PAUSE_C ONTINUE = 0x0040;
private const int SERVICE_INTERRO GATE = 0x0080;
private const int SERVICE_USER_DE FINED_CONTROL = 0x0100;

private const int SERVICE_ALL_ACC ESS = STANDARD_RIGHTS _REQUIRED
|
SERVICE_QUERY_C ONFIG |
SERVICE_CHANGE_ CONFIG |
SERVICE_QUERY_S TATUS |
SERVICE_ENUMERA TE_DEPENDENTS |
SERVICE_START |
SERVICE_STOP |
SERVICE_PAUSE_C ONTINUE |
SERVICE_INTERRO GATE |
SERVICE_USER_DE FINED_CONTROL;

private const int SERVICE_DEMAND_ START = 0x00000003;
private const int SERVICE_KERNEL_ DRIVER = 0x00000001;
private const int SERVICE_ERROR_N ORMAL = 0x00000001;

private const uint GENERIC_READ = 0x80000000;
private const uint FILE_SHARE_READ = 1;
private const uint FILE_SHARE_WRIT E = 2;
private const uint OPEN_EXISTING = 3;
private const uint IOCTL_SHOCKMGR_ READ_ACCELEROME TER_DATA = 0x733fc;
private const int FACILITY_WIN32 = unchecked((int) 0x80070000);
private IntPtr handle = INVALID_HANDLE_ VALUE;

[DllImport("adva pi32", SetLastError = true)]
internal static extern IntPtr OpenSCManager(s tring machineName, string
databaseName, uint dwDesiredAccess );
[DllImport("adva pi32", SetLastError = true)]
internal static extern IntPtr CreateService(I ntPtr hSCManager, string
serviceName, string displayName,
uint dwDesiredAccess , uint serviceType, uint startType, uint
errorControl,
string lpBinaryPathNam e, string lpLoadOrderGrou p, string lpdwTagId,
string lpDependencies,
string lpServiceStartN ame, string lpPassword);

[DllImport("adva pi32")]
internal static extern bool CloseServiceHan dle(IntPtr handle);
[DllImport("kern el32", SetLastError = true)]
internal static extern IntPtr CreateFile(stri ng lpFileName, uint
dwDesiredAccess , uint dwShareMode, IntPtr lpSecurityAttri butes, uint
dwCreationDispo sition, uint dwFlagsAndAttri butes, IntPtr hTemplateFile);

[DllImport("kern el32")]
internal static extern void CloseHandle(Int Ptr handle);

[DllImport("kern el32", SetLastError = true)]
private static extern bool DeviceIoControl (IntPtr hDevice, uint
dwIoControlCode , IntPtr lpInBuffer, uint nInBufferSize, IntPtr lpOutBuffer,
uint nOutBufferSize, ref uint lpBytesReturned , IntPtr lpOverlapped);
internal bool LoadDeviceDrive r()
{
IntPtr scHandle = OpenSCManager(n ull, null, SC_MANAGER_ALL_ ACCESS);
if (scHandle != INVALID_HANDLE_ VALUE)
{
IntPtr hService = CreateService(s cHandle, this.driverName ,
this.driverName , SERVICE_ALL_ACC ESS
, SERVICE_KERNEL_ DRIVER, SERVICE_DEMAND_ START,SERVICE_E RROR_NORMAL
,execPath, null, null, null, null, null);
if (hService != IntPtr.Zero)
{
CloseServiceHan dle(hService); // close both handles
CloseServiceHan dle(scHandle);
// Start the driver using System.Manageme nt (WMI)
if (ExecuteSCMOper ationOnDriver(t his.driverName, "StartServi ce") == 0)
return true;
}
else
if (Marshal.GetLas tWin32Error()== 1073) // Driver/Service already in DB
{
CloseServiceHan dle(scHandle);
// Start the driver using System.Manageme nt (WMI)
if (ExecuteSCMOper ationOnDriver(t his.driverName, "StartServi ce") == 0)
return true;
}
Marshal.ThrowEx ceptionForHR(HR ESULT_FROM_WIN3 2(Marshal.GetLa stWin32Error()) );
}
return false;
}

internal bool UnloadDeviceDri ver()
{
int ret = 0;
if (fileHandle != IntPtr.Zero && fileHandle != INVALID_HANDLE_ VALUE)
{
CloseHandle(fil eHandle);
}
if ((ret = ExecuteSCMOpera tionOnDriver(dr iverName, "StopServic e")) == 0)
{
ret = ExecuteSCMOpera tionOnDriver(dr iverName, "Delete");
}
if (ret != 0)
{
return false;
}
return true;
}

private static int ExecuteSCMOpera tionOnDriver(st ring driverName, string
operation)
{
ManagementPath path = new ManagementPath( );
path.Server = ".";
path.NamespaceP ath = @"root\CIMV2 ";
path.RelativePa th = @"Win32_BaseSer vice.Name='" + driverName +"'";
using(Managemen tObject o = new ManagementObjec t(path))
{
ManagementBaseO bject outParams = o.InvokeMethod( operation,
null, null);
return Convert.ToInt32 (outParams.Prop erties["ReturnValu e"].Value);
}
}
internal IntPtr OpenDevice()
{
fileHandle = CreateFile("\\\ \.\\" + driverName, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRIT E, IntPtr.Zero, OPEN_EXISTING, 0,
IntPtr.Zero);
if(handle == INVALID_HANDLE_ VALUE)
{
Marshal.ThrowEx ceptionForHR(HR ESULT_FROM_WIN3 2(Marshal.GetLa stWin32Error()) );
}
return fileHandle;
}
private static int HRESULT_FROM_WI N32(int x)
{
return x <= 0 ? x : ((x & 0x0000FFFF) | FACILITY_WIN32) ;
}
}

Nov 16 '05 #13

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

10
7217
by: Wouter van Ooijen | last post by:
I want to use Python to interface with an USB HID device (not a keyboard or mouse, just something that uses the HID driver to avoid the need for a specific driver). Is this possible in pure Python on Windows, or even better, in a portable way? Wouter van Ooijen -- ------------------------------------ http://www.voti.nl PICmicro chips, programmers, consulting
4
2574
by: dalewz | last post by:
Hi, Could sb kindly answer my following questions: Plan: I am trying to find a language to build a GUI to communicate with our device via serial port. Questions: 1. which language (VC++ or Java) is the best?
2
6981
by: nbhalala | last post by:
Hello Friends, Hi Myself Naresh (B.E. Comp. Eng) from Mumbai... I'm a Linux Device Driver Writer... I would like to learn writing Driver of "USB Devices"...BUT before that I'm presently working on "PCI ETHERNET NETWORK ADAPTER (RTL8139)" for that - reading it's Datasheet and trying to write simple backbone Driver BUT for that friend I need your Help... Resources I have/using -
2
2130
by: Claus Konrad | last post by:
Hi Anybody got an impression whether .NET 2.0 supports USB ports? I know that the Serial (COM) and parallel ports (LPT1) are included, but how is the story on USB ports? /Claus
7
4452
by: Ritu | last post by:
Hi All, Can any body please tell me how i can write a device driver using CSharp. Thanks, Ritu
0
1546
by: am | last post by:
Hi, I have an USB hardware device that came with some (poor) software. I would like to write my own software to use the hardware in dotnet. There are no COM dll's to reference from the original software. I have read a lot in newsgroups and everywhere it is stated that "you need a device-driver" - well I got the device-driver (.sys file in windows/system32 folder)
7
2644
by: Nuno Magalhaes | last post by:
I have a problem loading a DLL file that is exactly in the same directory of the executable. The DLL is not in .NET format but can be accessed through P/Invoke. This never happened to me. My Platform Invoke looks something like this: static extern int _EnumerateDevices(out IntPtr ppDeviceList, out int
1
2024
by: =?Utf-8?B?15DXldeo158=?= | last post by:
I have recently installed my windows XP, the process went smoothly, but I had encounterd some drivers issues after the installation. I managed to solve the ethernet adapter driver issue, but I couldn't solve the audio device problem. I have tried many programs to detect which audio device I have, and using this tool : DriverGuide ToolKit, I identified it as realtek audio device. (I have an Intel motherboard)
2
3650
by: Steve | last post by:
Hi All I have a POS program (Windows app) . I am using VB.net 2005 Pro The OPOS drivers freezes my program if Parallel port is configured for the Receipt printer and the Printer is not connected or is turned off The freezing happens when I try to Claim the device e.g I am using a .net assembly OPOSPOSPrinter.dll
0
9688
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look ! Part I. Meaning of...
0
9544
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
10259
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10238
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9077
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
7570
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
5467
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
1
4145
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
2
3761
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.