D
Duncan Mole
Hi,
This is probably an easy one but it iy first bit of p/invoke. I am trying to
use the following C struct in a call:
typedef struct
{
BYTE SRB_Cmd;
BYTE SRB_Status,
BYTE SRB_HaId;
BYTE SRB_Flags;
DWORD SRB_Hdr_Rsvd;
BYTE HA_Count;
BYTE HA_SCSI_ID;
BYTE HA_ManagerId[16];
BYTE HA_Identifiyer[16];
BYTE HA_Unique[16];
BYTE HA_SRsvd1;
}
SRB_HAInquiry, *PSRB_HAInquiry;
The function prototype is as follows:
SendASPI32Command((LPSRB)&srbHAInquiry)
According to the docs LPSRB is 4 bit generic pointer to a command strucure.
Fort this I have:
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public class SRB_HAInquiry
{
public const int STRING_LEN = 16;
public byte SRB_Cmd;
public byte SRB_Status;
public byte SRB_HaId;
public byte SRB_Flags;
public UInt32 SRB_Hdr_Rsvd;
public byte HA_Count;
public byte HA_SCSI_ID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=STRING_LEN)]
public string HA_ManagerId = new string(' ', STRING_LEN);
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=STRING_LEN)]
public string HA_Identifier = new string(' ', STRING_LEN);
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=STRING_LEN)]
public string HA_Unique = new string(' ', STRING_LEN);
public UInt16 HA_Rsvd1 = 0;
}
my invokke is :
[DllImport("wnaspi32.dll", EntryPoint="SendASPI32Command",
ExactSpelling=true, CharSet=CharSet.Ansi, SetLastError=true)]
private static extern UInt32 SendASPI32Command(
ref SRB_HAInquiry str);
and my call is:
public SRB_HAInquiry ScHaInquiry(int haId)
{
SRB_HAInquiry enq = new SRB_HAInquiry();
enq.SRB_Cmd = (byte)Commands.SC_HA_INQUIRY;
enq.SRB_HaId = (byte)haId;
UInt32 result = SendASPI32Command(ref enq);
return enq;
}
Any help would be much appreciated.
This is probably an easy one but it iy first bit of p/invoke. I am trying to
use the following C struct in a call:
typedef struct
{
BYTE SRB_Cmd;
BYTE SRB_Status,
BYTE SRB_HaId;
BYTE SRB_Flags;
DWORD SRB_Hdr_Rsvd;
BYTE HA_Count;
BYTE HA_SCSI_ID;
BYTE HA_ManagerId[16];
BYTE HA_Identifiyer[16];
BYTE HA_Unique[16];
BYTE HA_SRsvd1;
}
SRB_HAInquiry, *PSRB_HAInquiry;
The function prototype is as follows:
SendASPI32Command((LPSRB)&srbHAInquiry)
According to the docs LPSRB is 4 bit generic pointer to a command strucure.
Fort this I have:
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public class SRB_HAInquiry
{
public const int STRING_LEN = 16;
public byte SRB_Cmd;
public byte SRB_Status;
public byte SRB_HaId;
public byte SRB_Flags;
public UInt32 SRB_Hdr_Rsvd;
public byte HA_Count;
public byte HA_SCSI_ID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=STRING_LEN)]
public string HA_ManagerId = new string(' ', STRING_LEN);
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=STRING_LEN)]
public string HA_Identifier = new string(' ', STRING_LEN);
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=STRING_LEN)]
public string HA_Unique = new string(' ', STRING_LEN);
public UInt16 HA_Rsvd1 = 0;
}
my invokke is :
[DllImport("wnaspi32.dll", EntryPoint="SendASPI32Command",
ExactSpelling=true, CharSet=CharSet.Ansi, SetLastError=true)]
private static extern UInt32 SendASPI32Command(
ref SRB_HAInquiry str);
and my call is:
public SRB_HAInquiry ScHaInquiry(int haId)
{
SRB_HAInquiry enq = new SRB_HAInquiry();
enq.SRB_Cmd = (byte)Commands.SC_HA_INQUIRY;
enq.SRB_HaId = (byte)haId;
UInt32 result = SendASPI32Command(ref enq);
return enq;
}
Any help would be much appreciated.