473,320 Members | 1,794 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,320 software developers and data experts.

How to use the DataBuffer of SCSI_PASS_THROUGH_DIRECT in c# ?

Hi All;

I need to send a READ command to CD-ROM drive by SCSI_PASS_THROUGH_DIRECT.

int inputSize = Marshal.SizeOf(typeof(SCSI_PASS_THROUGH_WITH_BUFFE RS));
IntPtr input = Marshal.AllocHGlobal(inputSize);
Marshal.StructureToPtr(sptdwb, input, true)
In my code, the Marshal.StructureToPtr(sptdwb, input, true) will return
error, because the sptdwb and input size are not equal, then the PVOID
DataBuffer can't be access.

Do you have any ideas ?

May 29 '07 #1
9 6738
Sorry, modify some message.
I need to send a READ command to CD-ROM drive by SCSI_PASS_THROUGH_DIRECT.
As SCSI_PASS_THROUGH_DIRECT struct:

typedef struct _SCSI_PASS_THROUGH_DIRECT {
USHORT Length;
UCHAR ScsiStatus;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR CdbLength;
UCHAR SenseInfoLength;
UCHAR DataIn;
ULONG DataTransferLength;
ULONG TimeOutValue;
PVOID DataBuffer;
ULONG SenseInfoOffset;
UCHAR Cdb[16];
}SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
int inputSize = Marshal.SizeOf(typeof(SCSI_PASS_THROUGH_WITH_BUFFE RS));
IntPtr input = Marshal.AllocHGlobal(inputSize);
Marshal.StructureToPtr(sptdwb, input, true)
In my code, the Marshal.StructureToPtr(sptdwb, input, true) will return
error, because I need to modify the DataBuffer size for each command, the
sptdwb and input size will not equal, then the PVOID DataBuffer can't be
access.

Do you have any ideas ?

Thank you for your help !!

May 29 '07 #2
"Marce" <u34601@uwewrote in message news:72e367ac5a552@uwe...
Sorry, modify some message.
I need to send a READ command to CD-ROM drive by
SCSI_PASS_THROUGH_DIRECT.
As SCSI_PASS_THROUGH_DIRECT struct:

typedef struct _SCSI_PASS_THROUGH_DIRECT {
USHORT Length;
UCHAR ScsiStatus;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR CdbLength;
UCHAR SenseInfoLength;
UCHAR DataIn;
ULONG DataTransferLength;
ULONG TimeOutValue;
PVOID DataBuffer;
ULONG SenseInfoOffset;
UCHAR Cdb[16];
}SCSI_PASS_THROUGH_DIRECT, *PSCSI_PASS_THROUGH_DIRECT;
int inputSize = Marshal.SizeOf(typeof(SCSI_PASS_THROUGH_WITH_BUFFE RS));
IntPtr input = Marshal.AllocHGlobal(inputSize);
Marshal.StructureToPtr(sptdwb, input, true)
In my code, the Marshal.StructureToPtr(sptdwb, input, true) will return
error, because I need to modify the DataBuffer size for each command, the
sptdwb and input size will not equal, then the PVOID DataBuffer can't be
access.

Do you have any ideas ?

Thank you for your help !!


We need your SCSI_PASS_THROUGH_DIRECT structure declaration in C# to help
you with this.

Willy.

May 29 '07 #3
Willy Denoyette [MVP] wrote:
>Sorry, modify some message.
[quoted text clipped - 30 lines]
>>
Thank you for your help !!

We need your SCSI_PASS_THROUGH_DIRECT structure declaration in C# to help
you with this.

Willy.
Thank you Willy!

[StructLayout(LayoutKind.Sequential)]
class SCSI_PASS_THROUGH_DIRECT
{

public UInt16 Length = (UInt16)Marshal.SizeOf(typeof
(SCSI_PASS_THROUGH_DIRECT));
public byte ScsiStatus = 0;
public byte PathId= 0;
public byte TargetId= 0;
public byte Lun = 0;
public byte CdbLength = 12;
public byte SenseInfoLength = 24;
public byte DataIn ;
public Int32 DataTransferLength;
public Int32 TimeOutValue= 30;
public IntPtr DataBuffer;
public UInt32 SenseInfoOffset = (UInt32)Marshal.OffsetOf(typeof
(SCSI_PASS_THROUGH_WITH_BUFFERS), "ucSenseBuf");
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 16)]
public byte[] Cdb = new byte[16];
}

FYI.

--
Message posted via DotNetMonster.com
http://www.dotnetmonster.com/Uwe/For...sharp/200705/1

May 29 '07 #4
Marce wrote:
>>Sorry, modify some message.
[quoted text clipped - 6 lines]
>>
Willy.
Thank you Willy!

[StructLayout(LayoutKind.Sequential)]
class SCSI_PASS_THROUGH_DIRECT
{

public UInt16 Length = (UInt16)Marshal.SizeOf(typeof
(SCSI_PASS_THROUGH_DIRECT));
public byte ScsiStatus = 0;
public byte PathId= 0;
public byte TargetId= 0;
public byte Lun = 0;
public byte CdbLength = 12;
public byte SenseInfoLength = 24;
public byte DataIn ;
public Int32 DataTransferLength;
public Int32 TimeOutValue= 30;
public IntPtr DataBuffer;
public UInt32 SenseInfoOffset = (UInt32)Marshal.OffsetOf(typeof
(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFERS), "ucSenseBuf");
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 16)]
public byte[] Cdb = new byte[16];
}

FYI.
--
Message posted via DotNetMonster.com
http://www.dotnetmonster.com/Uwe/For...sharp/200705/1

May 29 '07 #5
Sorry, modify some error message !

[StructLayout(LayoutKind.Sequential)]
class SCSI_PASS_THROUGH_DIRECT
{

public UInt16 Length = (UInt16)Marshal.SizeOf(typeof
(SCSI_PASS_THROUGH_DIRECT));
public byte ScsiStatus = 0;
public byte PathId= 0;
public byte TargetId= 0;
public byte Lun = 0;
public byte CdbLength = 12;
public byte SenseInfoLength = 24;
public byte DataIn ;
public Int32 DataTransferLength;
public Int32 TimeOutValue= 30;
public IntPtr DataBuffer;
public UInt32 SenseInfoOffset = (UInt32)Marshal.OffsetOf(typeof
(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFERS), "ucSenseBuf");
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 16)]
public byte[] Cdb = new byte[16];
}

--
Message posted via DotNetMonster.com
http://www.dotnetmonster.com/Uwe/For...sharp/200705/1

May 29 '07 #6
"Marce via DotNetMonster.com" <u34601@uwewrote in message
news:72e5d0179de3d@uwe...
Sorry, modify some error message !

[StructLayout(LayoutKind.Sequential)]
class SCSI_PASS_THROUGH_DIRECT
{

public UInt16 Length = (UInt16)Marshal.SizeOf(typeof
(SCSI_PASS_THROUGH_DIRECT));
public byte ScsiStatus = 0;
public byte PathId= 0;
public byte TargetId= 0;
public byte Lun = 0;
public byte CdbLength = 12;
public byte SenseInfoLength = 24;
public byte DataIn ;
public Int32 DataTransferLength;
public Int32 TimeOutValue= 30;
public IntPtr DataBuffer;
public UInt32 SenseInfoOffset = (UInt32)Marshal.OffsetOf(typeof
(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFERS), "ucSenseBuf");
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 16)]
public byte[] Cdb = new byte[16];
}

--
Message posted via DotNetMonster.com
http://www.dotnetmonster.com/Uwe/For...sharp/200705/1


You have to take care that you pass a correctly filled and aligned
structure, the buffers need to be fields in the same marshaled structure
(here SCSI_PASS_THROUGH_WITH_BUFFERS).

Here is how you could declare the structure and the
SCSI_PASS_THROUGH_WITH_BUFFERS class.

[StructLayout(LayoutKind.Sequential)]
struct SCSI_PASS_THROUGH_DIRECT
{
public short Length;
public byte ScsiStatus;
public byte PathId;
public byte TargetId;
public byte Lun;
public byte CdbLength;
public byte SenseInfoLength;
public byte DataIn ;
public int DataTransferLength;
public int TimeOutValue;
public IntPtr DataBufferOffset;
public uint SenseInfoOffset;
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 16)]
public byte[] Cdb;
};

[StructLayout(LayoutKind.Sequential)]
class SCSI_PASS_THROUGH_WITH_BUFFERS
{
internal SCSI_PASS_THROUGH_DIRECT sptd = new SCSI_PASS_THROUGH_DIRECT();
// // adapt size to suit your needs!!!!!!
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 18)]
internal byte[] sense ;
// adapt to suit your needs!!!!!!!
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 36)]
internal byte[] data ;
};
// usage ...

SCSI_PASS_THROUGH_WITH_BUFFERS info = new
SCSI_PASS_THROUGH_WITH_BUFFERS();
info.sptd.Cdb = new byte[16];
info.sense = new byte[18]; // adapt to suit your needs!!!!!!
info.data = new byte[36]; // adapt to suit your needs!!!!!!

info.sptd.Length = (short)Marshal.SizeOf(info.sptd);
info.sptd.SenseInfoOffset =
(uint)Marshal.OffsetOf(typeof(SCSI_PASS_THROUGH_WI TH_BUFFERS), "sense");
info.sptd.SenseInfoLength = (byte)info.sense.Length;
info.sptd.DataTransferLength = info.data.Length;
info.sptd.DataBufferOffset =
Marshal.OffsetOf(typeof(SCSI_PASS_THROUGH_WITH_BUF FERS), "data");
info.sptd.TimeOutValue = 30;
info.sptd.DataIn = SCSI_IOCTL_DATA_IN;
// initilalize the cdb
info.sptd.CdbLength = x; // length of CDB
info.sptd.Cdb[0] = ...;
....

IntPtr inpBuffer = Marshal.AllocHGlobal(Marshal.SizeOf(info));
Marshal.StructureToPtr(info, inpBuffer, false);
// call DeviceIoControl passing the buffer inpBuffer as inp buffer
and/or output buffer depending on the command.
int ret = DeviceIoControl(...., inpBuffer, Marshal.SizeOf(info), ...);
....

Willy.
May 29 '07 #7
Willy Denoyette [MVP] wrote:
>Sorry, modify some error message !
[quoted text clipped - 19 lines]
> public byte[] Cdb = new byte[16];
}

You have to take care that you pass a correctly filled and aligned
structure, the buffers need to be fields in the same marshaled structure
(here SCSI_PASS_THROUGH_WITH_BUFFERS).

Here is how you could declare the structure and the
SCSI_PASS_THROUGH_WITH_BUFFERS class.

[StructLayout(LayoutKind.Sequential)]
struct SCSI_PASS_THROUGH_DIRECT
{
public short Length;
public byte ScsiStatus;
public byte PathId;
public byte TargetId;
public byte Lun;
public byte CdbLength;
public byte SenseInfoLength;
public byte DataIn ;
public int DataTransferLength;
public int TimeOutValue;
public IntPtr DataBufferOffset;
public uint SenseInfoOffset;
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 16)]
public byte[] Cdb;
};

[StructLayout(LayoutKind.Sequential)]
class SCSI_PASS_THROUGH_WITH_BUFFERS
{
internal SCSI_PASS_THROUGH_DIRECT sptd = new SCSI_PASS_THROUGH_DIRECT();
// // adapt size to suit your needs!!!!!!
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 18)]
internal byte[] sense ;
// adapt to suit your needs!!!!!!!
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 36)]
internal byte[] data ;
};

// usage ...

SCSI_PASS_THROUGH_WITH_BUFFERS info = new
SCSI_PASS_THROUGH_WITH_BUFFERS();
info.sptd.Cdb = new byte[16];
info.sense = new byte[18]; // adapt to suit your needs!!!!!!
info.data = new byte[36]; // adapt to suit your needs!!!!!!

info.sptd.Length = (short)Marshal.SizeOf(info.sptd);
info.sptd.SenseInfoOffset =
(uint)Marshal.OffsetOf(typeof(SCSI_PASS_THROUGH_W ITH_BUFFERS), "sense");
info.sptd.SenseInfoLength = (byte)info.sense.Length;
info.sptd.DataTransferLength = info.data.Length;
info.sptd.DataBufferOffset =
Marshal.OffsetOf(typeof(SCSI_PASS_THROUGH_WITH_BU FFERS), "data");
info.sptd.TimeOutValue = 30;
info.sptd.DataIn = SCSI_IOCTL_DATA_IN;
// initilalize the cdb
info.sptd.CdbLength = x; // length of CDB
info.sptd.Cdb[0] = ...;
....

IntPtr inpBuffer = Marshal.AllocHGlobal(Marshal.SizeOf(info));
Marshal.StructureToPtr(info, inpBuffer, false);
// call DeviceIoControl passing the buffer inpBuffer as inp buffer
and/or output buffer depending on the command.
int ret = DeviceIoControl(...., inpBuffer, Marshal.SizeOf(info), ...);
...

Willy.
Thanks Willy.

It works ok by SCSI_PASS_THROUGH_WITH_BUFFERS, and the data buffer size need
to fixed.
As this:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 30*2048)]
public byte[] ucDataBuf = new byte[30 * 2048];

But In the SCSI_PASS_THROUGH_DIRECT_BUFFERS structure, the DataBuffer is
IntPtr point.
How can I send a ATAPI cmd with databuffer by
SCSI_PASS_THROUGH_DIRECT_BUFFERS ?

--
Message posted via http://www.dotnetmonster.com

May 30 '07 #8
"Marce via DotNetMonster.com" <u34601@uwewrote in message
news:72f0129368a0e@uwe...
Willy Denoyette [MVP] wrote:
>>Sorry, modify some error message !
[quoted text clipped - 19 lines]
>> public byte[] Cdb = new byte[16];
}

You have to take care that you pass a correctly filled and aligned
structure, the buffers need to be fields in the same marshaled structure
(here SCSI_PASS_THROUGH_WITH_BUFFERS).

Here is how you could declare the structure and the
SCSI_PASS_THROUGH_WITH_BUFFERS class.

[StructLayout(LayoutKind.Sequential)]
struct SCSI_PASS_THROUGH_DIRECT
{
public short Length;
public byte ScsiStatus;
public byte PathId;
public byte TargetId;
public byte Lun;
public byte CdbLength;
public byte SenseInfoLength;
public byte DataIn ;
public int DataTransferLength;
public int TimeOutValue;
public IntPtr DataBufferOffset;
public uint SenseInfoOffset;
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 16)]
public byte[] Cdb;
};

[StructLayout(LayoutKind.Sequential)]
class SCSI_PASS_THROUGH_WITH_BUFFERS
{
internal SCSI_PASS_THROUGH_DIRECT sptd = new SCSI_PASS_THROUGH_DIRECT();
// // adapt size to suit your needs!!!!!!
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 18)]
internal byte[] sense ;
// adapt to suit your needs!!!!!!!
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 36)]
internal byte[] data ;
};

// usage ...

SCSI_PASS_THROUGH_WITH_BUFFERS info = new
SCSI_PASS_THROUGH_WITH_BUFFERS();
info.sptd.Cdb = new byte[16];
info.sense = new byte[18]; // adapt to suit your needs!!!!!!
info.data = new byte[36]; // adapt to suit your needs!!!!!!

info.sptd.Length = (short)Marshal.SizeOf(info.sptd);
info.sptd.SenseInfoOffset =
(uint)Marshal.OffsetOf(typeof(SCSI_PASS_THROUGH_ WITH_BUFFERS), "sense");
info.sptd.SenseInfoLength = (byte)info.sense.Length;
info.sptd.DataTransferLength = info.data.Length;
info.sptd.DataBufferOffset =
Marshal.OffsetOf(typeof(SCSI_PASS_THROUGH_WITH_B UFFERS), "data");
info.sptd.TimeOutValue = 30;
info.sptd.DataIn = SCSI_IOCTL_DATA_IN;
// initilalize the cdb
info.sptd.CdbLength = x; // length of CDB
info.sptd.Cdb[0] = ...;
....

IntPtr inpBuffer = Marshal.AllocHGlobal(Marshal.SizeOf(info));
Marshal.StructureToPtr(info, inpBuffer, false);
// call DeviceIoControl passing the buffer inpBuffer as inp buffer
and/or output buffer depending on the command.
int ret = DeviceIoControl(...., inpBuffer, Marshal.SizeOf(info), ...);
...

Willy.
Thanks Willy.

It works ok by SCSI_PASS_THROUGH_WITH_BUFFERS, and the data buffer size
need
to fixed.
As this:
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 30*2048)]
public byte[] ucDataBuf = new byte[30 * 2048];

But In the SCSI_PASS_THROUGH_DIRECT_BUFFERS structure, the DataBuffer is
IntPtr point.
How can I send a ATAPI cmd with databuffer by
SCSI_PASS_THROUGH_DIRECT_BUFFERS ?

--
Message posted via http://www.dotnetmonster.com

Ok, if you need to pass such large buffers you will have to use the
IOCTL_SCSI_PASS_THROUGH_DIRECT ioctl command and define your structures as
follows:

[StructLayout(LayoutKind.Sequential)]
struct SCSI_PASS_THROUGH_DIRECT
{
public short Length;
public byte ScsiStatus;
public byte PathId;
public byte TargetId;
public byte Lun;
public byte CdbLength;
public byte SenseInfoLength;
public byte DataIn ;
public int DataTransferLength;
public int TimeOutValue;
public IntPtr DataBuffer; // note this is now interpreted as a
pointer, not an offset!!
public uint SenseInfoOffset;
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 16)]
public byte[] Cdb;
};
[StructLayout(LayoutKind.Sequential)]
class SCSI_PASS_THROUGH_DIRECT_WITH_BUFFERS
{
internal SCSI_PASS_THROUGH_DIRECT sptd = new SCSI_PASS_THROUGH_DIRECT();
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 18)]
internal byte[] sense ;
};

in your code, you'll have to allocate the data buffer like this:

SCSI_PASS_THROUGH_DIRECT_WITH_BUFFERS info = new
SCSI_PASS_THROUGH_DIRECT_WITH_BUFFERS();
....
info.sptd.DataBuffer = Marshal.AllocHGlobal(30 * 2048); // allocate
correctly aligned buffer

marshal the data to/from the buffer using Marshal.Copy, and...
use the IOCTL_SCSI_PASS_THROUGH_DIRECT command in the call to the
DeviceIOControl API like this:

const int IOCTL_SCSI_PASS_THROUGH_DIRECT = 0x4D014; // IOCTL cmd
....
DeviceIoControl(fh, IOCTL_SCSI_PASS_THROUGH_DIRECT,....

don't forget to Marshal.FreeHGlobal when done with the unmanaged buffer!!

Willy.

May 30 '07 #9
Dear Willy:
Thank you for your help!
This help me more !

Willy Denoyette [MVP] wrote:
>>>Sorry, modify some error message !
[quoted text clipped - 83 lines]
>How can I send a ATAPI cmd with databuffer by
SCSI_PASS_THROUGH_DIRECT_BUFFERS ?

Ok, if you need to pass such large buffers you will have to use the
IOCTL_SCSI_PASS_THROUGH_DIRECT ioctl command and define your structures as
follows:

[StructLayout(LayoutKind.Sequential)]
struct SCSI_PASS_THROUGH_DIRECT
{
public short Length;
public byte ScsiStatus;
public byte PathId;
public byte TargetId;
public byte Lun;
public byte CdbLength;
public byte SenseInfoLength;
public byte DataIn ;
public int DataTransferLength;
public int TimeOutValue;
public IntPtr DataBuffer; // note this is now interpreted as a
pointer, not an offset!!
public uint SenseInfoOffset;
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 16)]
public byte[] Cdb;
};
[StructLayout(LayoutKind.Sequential)]
class SCSI_PASS_THROUGH_DIRECT_WITH_BUFFERS
{
internal SCSI_PASS_THROUGH_DIRECT sptd = new SCSI_PASS_THROUGH_DIRECT();
[MarshalAs(UnmanagedType.ByValArray,SizeConst = 18)]
internal byte[] sense ;
};

in your code, you'll have to allocate the data buffer like this:

SCSI_PASS_THROUGH_DIRECT_WITH_BUFFERS info = new
SCSI_PASS_THROUGH_DIRECT_WITH_BUFFERS();
...
info.sptd.DataBuffer = Marshal.AllocHGlobal(30 * 2048); // allocate
correctly aligned buffer

marshal the data to/from the buffer using Marshal.Copy, and...
use the IOCTL_SCSI_PASS_THROUGH_DIRECT command in the call to the
DeviceIOControl API like this:

const int IOCTL_SCSI_PASS_THROUGH_DIRECT = 0x4D014; // IOCTL cmd
...
DeviceIoControl(fh, IOCTL_SCSI_PASS_THROUGH_DIRECT,....

don't forget to Marshal.FreeHGlobal when done with the unmanaged buffer!!

Willy.
--
Message posted via DotNetMonster.com
http://www.dotnetmonster.com/Uwe/For...sharp/200705/1

May 31 '07 #10

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

Similar topics

0
by: Krishan | last post by:
hi, maybe i've been looking at this for too long, but i think i found a strange thing in the JDK. take the color class and use the method getRGB() on a color, you get an integer with the color...
3
by: bull.enteract | last post by:
Ok, I start off with a bitmap image. I encode it as a jpeg and send it across the network and pick it up on the other end. Now I have the jpeg image on the other end as an arrray of bytes and I...
8
by: Bart Blommerde | last post by:
Compiling the code below results in the following g++ error : ' cannot declare member function sourceA::DataBuffer<KeyType,ValType>::buffer' within `SourceA' ' What I'm trying to do here is...
25
by: Allan Rydberg | last post by:
hi i'm trying to shift a double, but i'm getting the error message '>>' illegal, left operand double. althought that the manpages say, '>>' and '<<' can be applied for int's only, i was able...
2
by: Rekkie | last post by:
Hi, I am trying to implement a ping client that is multithreading. The approach I have used is to create a ping class which I instantiate from the main thread and which contains a method...
5
by: jmsantoss | last post by:
Hi, This is a design question. I have a class named "DataBuffer" that stores some data. After "DataBuffer" is created it can not be modified. All the methods of "DataBuffer" are const as data...
11
by: Daniel Bass | last post by:
Greetings! I'm trying to call this method in a c# app... SNAPIDLL_API int __stdcall SNAPI_SetCapabilitiesBuffer(HANDLE DeviceHandle, unsigned char *pData, long max_length); So far I've got...
3
by: Chris Saunders | last post by:
My C skills are rather meager so forgive me if I do not express my question clearly enough. Here is a struct that is declared in Windows: typedef struct _REPARSE_GUID_DATA_BUFFER { DWORD...
0
by: DolphinDB | last post by:
Tired of spending countless mintues downsampling your data? Look no further! In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
0
isladogs
by: isladogs | last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM). In this month's session, we are pleased to welcome back...
0
by: jfyes | last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
1
by: PapaRatzi | last post by:
Hello, I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
1
by: Defcon1945 | last post by:
I'm trying to learn Python using Pycharm but import shutil doesn't work
1
by: Shællîpôpï 09 | last post by:
If u are using a keypad phone, how do u turn on JavaScript, to access features like WhatsApp, Facebook, Instagram....
0
by: af34tf | last post by:
Hi Guys, I have a domain whose name is BytesLimited.com, and I want to sell it. Does anyone know about platforms that allow me to list my domain in auction for free. Thank you
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...

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.