This file is indexed.

/usr/x86_64-w64-mingw32/include/iscsidsc.h is in mingw-w64-x86-64-dev 2.0.3-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
/**
 * This file has no copyright assigned and is placed in the Public Domain.
 * This file is part of the w64 mingw-runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
#ifndef _INC_ISCSIDSC
#define _INC_ISCSIDSC
#include <ntddscsi.h>
#if (_WIN32_WINNT >= 0x0600)
#ifdef __cplusplus
extern "C" {
#endif

  typedef enum  {
    ISCSI_NO_AUTH_TYPE             = 0,
    ISCSI_CHAP_AUTH_TYPE           = 1,
    ISCSI_MUTUAL_CHAP_AUTH_TYPE    = 2 
  } ISCSI_AUTH_TYPES;

  typedef enum  {
    ISCSI_DIGEST_TYPE_NONE     = 0,
    ISCSI_DIGEST_TYPE_CRC32C   = 1 
  } ISCSI_DIGEST_TYPES;

  typedef ULONG ISCSI_LOGIN_OPTIONS_INFO_SPECIFIED,
	      *PISCSI_LOGIN_OPTIONS_INFO_SPECIFIED;
#define ISCSI_LOGIN_OPTIONS_HEADER_DIGEST            0x00000001
#define ISCSI_LOGIN_OPTIONS_DATA_DIGEST              0x00000002
#define ISCSI_LOGIN_OPTIONS_MAXIMUM_CONNECTIONS      0x00000004
#define ISCSI_LOGIN_OPTIONS_DEFAULT_TIME_2_WAIT      0x00000008
#define ISCSI_LOGIN_OPTIONS_DEFAULT_TIME_2_RETAIN    0x00000010
#define ISCSI_LOGIN_OPTIONS_USERNAME                 0x00000020
#define ISCSI_LOGIN_OPTIONS_PASSWORD                 0x00000040
#define ISCSI_LOGIN_OPTIONS_AUTH_TYPE                0x00000080

#define ISCSI_LOGIN_OPTIONS_VERSION                  0x00000000

  typedef ULONG ISCSI_LOGIN_FLAGS,
	      *PISCSI_LOGIN_FLAGS;

#define ISCSI_LOGIN_FLAG_REQUIRE_IPSEC               0x00000001
#define ISCSI_LOGIN_FLAG_MULTIPATH_ENABLED           0x00000002
#define ISCSI_LOGIN_FLAG_RESERVED1                   0x00000004
#define ISCSI_LOGIN_FLAG_ALLOW_PORTAL_HOPPING        0x00000008
#define ISCSI_LOGIN_FLAG_USE_RADIUS_RESPONSE         0x00000010
#define ISCSI_LOGIN_FLAG_USE_RADIUS_VERIFICATION     0x00000020

  typedef ULONGLONG ISCSI_SECURITY_FLAGS,
		  *PISCSI_SECURITY_FLAGS;

#define ISCSI_SECURITY_FLAG_VALID                    0x00000001
#define ISCSI_SECURITY_FLAG_IKE_IPSEC_ENABLED        0x00000002
#define ISCSI_SECURITY_FLAG_MAIN_MODE_ENABLED        0x00000004
#define ISCSI_SECURITY_FLAG_AGGRESSIVE_MODE_ENABLED  0x00000008
#define ISCSI_SECURITY_FLAG_PFS_ENABLED              0x00000010
#define ISCSI_SECURITY_FLAG_TRANSPORT_MODE_PREFERRED 0x00000020
#define ISCSI_SECURITY_FLAG_TUNNEL_MODE_PREFERRED    0x00000040


#define AddIScsiConnection __MINGW_NAME_AW(AddIScsiConnection)
#define AddIScsiSendTargetPortal __MINGW_NAME_AW(AddIScsiSendTargetPortal)
#define AddIScsiStaticTarget __MINGW_NAME_AW(AddIScsiStaticTarget)
#define RemoveIScsiStaticTarget __MINGW_NAME_AW(RemoveIScsiStaticTarget)
#define AddISNSServer __MINGW_NAME_AW(AddISNSServer)
#define AddPersistentiScsiDevice __MINGW_NAME_AW(AddPersistentiScsiDevice)
#define RemoveIScsiPersistentTarget __MINGW_NAME_AW(RemoveIScsiPersistentTarget)
#define RemovePersistentIScsiDevice __MINGW_NAME_AW(RemovePersistentIScsiDevice)
#define PERSISTENT_ISCSI_LOGIN_INFO __MINGW_NAME_AW(PERSISTENT_ISCSI_LOGIN_INFO)
#define AddRadiusServer __MINGW_NAME_AW(AddRadiusServer)
#define RemoveRadiusServer __MINGW_NAME_AW(RemoveRadiusServer)

#define MAX_ISCSI_PORTAL_NAME_LEN 256
#define MAX_ISCSI_PORTAL_ADDRESS_LEN 256
#define MAX_ISCSI_HBANAME_LEN 256

typedef enum _TARGET_INFORMATION_CLASS {
  ProtocolType,
  TargetAlias,
  DiscoveryMechanisms,
  PortalGroups,
  PersistentTargetMappings,
  InitiatorName,
  TargetFlags,
  LoginOptions 
} TARGET_INFORMATION_CLASS;

typedef enum _TARGETPROTOCOLTYPE {
  ISCSI_TCP_PROTOCOL_TYPE 
} TARGETPROTOCOLTYPE;

typedef enum _IKE_AUTHENTICATION_METHOD {
  IKE_AUTHENTICATION_PRESHARED_KEY_METHOD    = 1 
} IKE_AUTHENTICATION_METHOD, *PIKE_AUTHENTICATION_METHOD;

typedef struct _ISCSI_LOGIN_OPTIONS {
  ULONG                              Version;
  ISCSI_LOGIN_OPTIONS_INFO_SPECIFIED InformationSpecified;
  ISCSI_LOGIN_FLAGS                  LoginFlags;
  ISCSI_AUTH_TYPES                   AuthType;
  ISCSI_DIGEST_TYPES                 HeaderDigest;
  ISCSI_DIGEST_TYPES                 DataDigest;
  ULONG                              MaximumConnections;
  ULONG                              DefaultTime2Wait;
  ULONG                              DefaultTime2Retain;
  ULONG                              UsernameLength;
  ULONG                              PasswordLength;
  PUCHAR                             Username;
  PUCHAR                             Password;
} ISCSI_LOGIN_OPTIONS, *PISCSI_LOGIN_OPTIONS, *PSCSI_LOGIN_OPTIONS, *PISCI_LOGIN_OPTIONS;

typedef struct _ISCSI_TARGET_PORTALA {
  CHAR  SymbolicName[MAX_ISCSI_PORTAL_NAME_LEN];
  CHAR  Address[MAX_ISCSI_PORTAL_ADDRESS_LEN];
  USHORT Socket;
} ISCSI_TARGET_PORTALA, *PISCSI_TARGET_PORTALA;

typedef struct _ISCSI_TARGET_PORTALW {
  WCHAR  SymbolicName[MAX_ISCSI_PORTAL_NAME_LEN];
  WCHAR  Address[MAX_ISCSI_PORTAL_ADDRESS_LEN];
  USHORT Socket;
} ISCSI_TARGET_PORTALW, *PISCSI_TARGET_PORTALW;

typedef struct _ISCSI_TARGET_PORTAL_GROUPA {
  ULONG               Count;
  ISCSI_TARGET_PORTALA Portals[1];
} ISCSI_TARGET_PORTAL_GROUPA, *PISCSI_TARGET_PORTAL_GROUPA;

typedef struct _ISCSI_TARGET_PORTAL_GROUPW {
  ULONG               Count;
  ISCSI_TARGET_PORTALW Portals[1];
} ISCSI_TARGET_PORTAL_GROUPW, *PISCSI_TARGET_PORTAL_GROUPW;

typedef struct _ISCSI_LUN_LIST {
  ULONG     OSLUN;
  ULONGLONG TargetLUN;
} SCSI_LUN_LIST, *PSCSI_LUN_LIST;

typedef struct _ISCSI_UNIQUE_SESSION_ID {
  ULONGLONG AdapterUnique;
  ULONGLONG AdapterSpecific;
}
ISCSI_UNIQUE_SESSION_ID,    *PISCSI_UNIQUE_SESSION_ID,
ISCSI_UNIQUE_CONNECTION_ID, *PISCSI_UNIQUE_CONNECTION_ID;

typedef struct _ISCSI_TARGET_MAPPINGA {
  CHAR                    InitiatorName[MAX_ISCSI_HBANAME_LEN];
  CHAR                    TargetName[MAX_ISCSI_NAME_LEN];
  CHAR                    OSDeviceName[MAX_PATH];
  ISCSI_UNIQUE_SESSION_ID SessionId;
  ULONG                   OSBusNumber;
  ULONG                   OSTargetNumber;
  ULONG                   LUNCount;
  PSCSI_LUN_LIST          LUNList;
} ISCSI_TARGET_MAPPINGA, *PISCSI_TARGET_MAPPINGA;

typedef struct _ISCSI_TARGET_MAPPINGW {
  WCHAR                   InitiatorName[MAX_ISCSI_HBANAME_LEN];
  WCHAR                   TargetName[MAX_ISCSI_NAME_LEN];
  WCHAR                   OSDeviceName[MAX_PATH];
  ISCSI_UNIQUE_SESSION_ID SessionId;
  ULONG                   OSBusNumber;
  ULONG                   OSTargetNumber;
  ULONG                   LUNCount;
  PSCSI_LUN_LIST          LUNList;
} ISCSI_TARGET_MAPPINGW, *PISCSI_TARGET_MAPPINGW;

typedef struct _PERSISTENT_ISCSI_LOGIN_INFOA {
  CHAR                   TargetName[MAX_ISCSI_NAME_LEN];
  BOOLEAN                IsInformationalSession;
  CHAR                   InitiatorInstance[MAX_ISCSI_HBANAME_LEN];
  ULONG                  InitiatorPortNumber;
  ISCSI_TARGET_PORTALA   TargetPortal;
  ISCSI_SECURITY_FLAGS   SecurityFlags;
  PISCSI_TARGET_MAPPINGA Mappings;
  ISCSI_LOGIN_OPTIONS    LoginOptions;
} PERSISTENT_ISCSI_LOGIN_INFOA, *PPERSISTENT_ISCSI_LOGIN_INFOA;

typedef struct _PERSISTENT_ISCSI_LOGIN_INFOW {
  CHAR                   TargetName[MAX_ISCSI_NAME_LEN];
  BOOLEAN                IsInformationalSession;
  CHAR                   InitiatorInstance[MAX_ISCSI_HBANAME_LEN];
  ULONG                  InitiatorPortNumber;
  ISCSI_TARGET_PORTALW   TargetPortal;
  ISCSI_SECURITY_FLAGS   SecurityFlags;
  PISCSI_TARGET_MAPPINGW Mappings;
  ISCSI_LOGIN_OPTIONS    LoginOptions;
} PERSISTENT_ISCSI_LOGIN_INFOW, *PPERSISTENT_ISCSI_LOGIN_INFOW;

typedef UCHAR IKE_IDENTIFICATION_PAYLOAD_TYPE, *PIKE_IDENTIFICATION_PAYLOAD_TYPE;

typedef struct _IKE_AUTHENTICATION_PRESHARED_KEY {
  ISCSI_SECURITY_FLAGS            SecurityFlags;
  IKE_IDENTIFICATION_PAYLOAD_TYPE IdType;
  ULONG                           IdLengthInBytes;
  PUCHAR                          Id;
  ULONG                           KeyLengthInBytes;
  PUCHAR                          Key;
} IKE_AUTHENTICATION_PRESHARED_KEY, *PIKE_AUTHENTICATION_PRESHARED_KEY;

typedef struct _IKE_AUTHENTICATION_INFORMATION {
  IKE_AUTHENTICATION_METHOD AuthMethod;
  __C89_NAMELESS union {
    IKE_AUTHENTICATION_PRESHARED_KEY PsKey;
  };
} IKE_AUTHENTICATION_INFORMATION, *PIKE_AUTHENTICATION_INFORMATION;

typedef struct _ISCSI_CONNECTION_INFOA {
  ISCSI_UNIQUE_CONNECTION_ID ConnectionId;
  CHAR                       InitiatorAddress;
  CHAR                       TargetAddress;
  USHORT                     InitiatorSocket;
  USHORT                     TargetSocket;
  UCHAR                      CID[2];
} ISCSI_CONNECTION_INFOA, *PISCSI_CONNECTION_INFOA;

typedef struct _ISCSI_CONNECTION_INFO {
  ISCSI_UNIQUE_CONNECTION_ID ConnectionId;
  TCHAR                      InitiatorAddress;
  TCHAR                      TargetAddress;
  USHORT                     InitiatorSocket;
  USHORT                     TargetSocket;
  UCHAR                      CID[2];
} ISCSI_CONNECTION_INFOW, *PISCSI_CONNECTION_INFOW;

typedef struct _ISCSI_SESSION_INFOA {
  ISCSI_UNIQUE_SESSION_ID SessionId;
  CHAR                    InitiatorName;
  CHAR                    TargetName;
  CHAR                    TargetNodeName;
  UCHAR                   ISID[6];
  UCHAR                   TSID[2];
  ULONG                   ConnectionCount;
  PISCSI_CONNECTION_INFOA Connections;
} ISCSI_SESSION_INFOA, *PISCSI_SESSION_INFOA;

typedef struct _ISCSI_SESSION_INFO {
  ISCSI_UNIQUE_SESSION_ID SessionId;
  WCHAR                   InitiatorName;
  WCHAR                   TargetName;
  WCHAR                   TargetNodeName;
  UCHAR                   ISID[6];
  UCHAR                   TSID[2];
  ULONG                   ConnectionCount;
  PISCSI_CONNECTION_INFOW Connections;
} ISCSI_SESSION_INFOW, *PISCSI_SESSION_INFOW;

typedef struct _ISCSI_VERSION_INFO {
  ULONG MajorVersion;
  ULONG MinorVersion;
  ULONG BuildNumber;
} ISCSI_VERSION_INFO, *PISCSI_VERSION_INFO;

typedef struct _ISCSI_TARGET_PORTAL_INFOA {
  CHAR   InitiatorName[MAX_ISCSI_HBANAME_LEN];
  ULONG  InitiatorPortNumber;
  CHAR   SymbolicName[MAX_ISCSI_PORTAL_NAME_LEN];
  CHAR   Address[MAX_ISCSI_PORTAL_ADDRESS_LEN];
  USHORT Socket;
} ISCSI_TARGET_PORTAL_INFOA, *PISCSI_TARGET_PORTAL_INFOA;

typedef struct _ISCSI_TARGET_PORTAL_INFOW {
  WCHAR  InitiatorName[MAX_ISCSI_HBANAME_LEN];
  ULONG  InitiatorPortNumber;
  WCHAR  SymbolicName[MAX_ISCSI_PORTAL_NAME_LEN];
  WCHAR  Address[MAX_ISCSI_PORTAL_ADDRESS_LEN];
  USHORT Socket;
} ISCSI_TARGET_PORTAL_INFOW, *PISCSI_TARGET_PORTAL_INFOW;

typedef struct _ISCSI_TARGET_PORTAL_INFO_EXA {
  CHAR   InitiatorName[MAX_ISCSI_HBANAME_LEN];
  ULONG  InitiatorPortNumber;
  CHAR   SymbolicName[MAX_ISCSI_PORTAL_NAME_LEN];
  CHAR   Address[MAX_ISCSI_PORTAL_ADDRESS_LEN];
  USHORT Socket;
  ISCSI_SECURITY_FLAGS SecurityFlags;
  ISCSI_LOGIN_OPTIONS  LoginOptions;
} ISCSI_TARGET_PORTAL_INFO_EX, *PISCSI_TARGET_PORTAL_INFO_EX;

typedef struct _ISCSI_TARGET_PORTAL_INFO_EXW {
  WCHAR  InitiatorName[MAX_ISCSI_HBANAME_LEN];
  ULONG  InitiatorPortNumber;
  WCHAR  SymbolicName[MAX_ISCSI_PORTAL_NAME_LEN];
  WCHAR  Address[MAX_ISCSI_PORTAL_ADDRESS_LEN];
  USHORT Socket;
  ISCSI_SECURITY_FLAGS SecurityFlags;
  ISCSI_LOGIN_OPTIONS  LoginOptions;
} ISCSI_TARGET_PORTAL_INFO_EX, *PISCSI_TARGET_PORTAL_INFO_EX;

__MINGW_TYPEDEF_AW(ISCSI_CONNECTION_INFO)
__MINGW_TYPEDEF_AW(PISCSI_CONNECTION_INFO)
__MINGW_TYPEDEF_AW(ISCSI_SESSION_INFO)
__MINGW_TYPEDEF_AW(PISCSI_SESSION_INFO)
__MINGW_TYPEDEF_AW(ISCSI_TARGET_PORTAL_GROUP)
__MINGW_TYPEDEF_AW(PISCSI_TARGET_PORTAL_GROUP)
__MINGW_TYPEDEF_AW(ISCSI_TARGET_PORTAL)
__MINGW_TYPEDEF_AW(PISCSI_TARGET_PORTAL)
__MINGW_TYPEDEF_AW(ISCSI_TARGET_MAPPING)
__MINGW_TYPEDEF_AW(PISCSI_TARGET_MAPPING)
__MINGW_TYPEDEF_AW(ISCSI_TARGET_PORTAL_INFO)
__MINGW_TYPEDEF_AW(PISCSI_TARGET_PORTAL_INFO)
__MINGW_TYPEDEF_AW(ISCSI_TARGET_PORTAL_INFO_EX)
__MINGW_TYPEDEF_AW(PISCSI_TARGET_PORTAL_INFO_EX)

typedef ULONG ISCSI_TARGET_FLAGS;

  HRESULT WINAPI AddIScsiConnectionA(PISCSI_UNIQUE_SESSION_ID UniqueSessionId,PVOID Reserved,ULONG InitiatorPortNumber,PISCSI_TARGET_PORTALA TargetPortal,ISCSI_SECURITY_FLAGS SecurityFlags,PSCSI_LOGIN_OPTIONS LoginOptions,ULONG KeySize,PCHAR Key,PISCSI_UNIQUE_CONNECTION_ID ConnectionId);
  HRESULT WINAPI AddIScsiConnectionW(PISCSI_UNIQUE_SESSION_ID UniqueSessionId,PVOID Reserved,ULONG InitiatorPortNumber,PISCSI_TARGET_PORTALW TargetPortal,ISCSI_SECURITY_FLAGS SecurityFlags,PSCSI_LOGIN_OPTIONS LoginOptions,ULONG KeySize,PCHAR Key,PISCSI_UNIQUE_CONNECTION_ID ConnectionId);

  HRESULT WINAPI AddIScsiSendTargetPortalA(PCHAR InitiatorName,ULONG InitiatorPortNumber,PISCI_LOGIN_OPTIONS LoginOptions,ISCSI_SECURITY_FLAGS SecurityFlags,PISCSI_TARGET_PORTALA Portal);

  HRESULT WINAPI AddIScsiSendTargetPortalW(PWCHAR InitiatorName,ULONG InitiatorPortNumber,PISCI_LOGIN_OPTIONS LoginOptions,ISCSI_SECURITY_FLAGS SecurityFlags,PISCSI_TARGET_PORTALW Portal);

  HRESULT WINAPI AddIScsiStaticTargetA(PCHAR TargetName,PCHAR TargetAlias,ISCSI_TARGET_FLAGS TargetFlags,BOOLEAN Persist,PISCSI_TARGET_MAPPINGA Mappings,PISCSI_LOGIN_OPTIONS LoginOptions,PISCSI_TARGET_PORTAL_GROUPA PortalGroup);

  HRESULT WINAPI AddIScsiStaticTargetW(PWCHAR TargetName,PWCHAR TargetAlias,ISCSI_TARGET_FLAGS TargetFlags,BOOLEAN Persist,PISCSI_TARGET_MAPPINGW Mappings,PISCSI_LOGIN_OPTIONS LoginOptions,PISCSI_TARGET_PORTAL_GROUPW PortalGroup);

  HRESULT WINAPI AddISNSServerA(PCHAR Address);
  HRESULT WINAPI AddISNSServerW(PWCHAR Address);

  HRESULT WINAPI AddRadiusServerA(PCHAR Address);
  HRESULT WINAPI AddRadiusServerW(PWCHAR Address);

  HRESULT WINAPI AddPersistentiScsiDeviceA(PCHAR VolumePath);
  HRESULT WINAPI AddPersistentiScsiDeviceW(PWCHAR VolumePath);

  HRESULT WINAPI ClearPersistentiScsiDevices(void);

  HRESULT WINAPI RemoveIScsiPersistentTargetA(PCHAR InitiatorInstance,ULONG InitiatorPortNumber,PCHAR TargetName,PISCSI_TARGET_PORTALA Portal);
  HRESULT WINAPI RemoveIScsiPersistentTargetW(PWCHAR InitiatorInstance,ULONG InitiatorPortNumber,PWCHAR TargetName,PISCSI_TARGET_PORTALW Portal);

  HRESULT WINAPI RemoveIScsiStaticTargetA(PCHAR TargetName);
  HRESULT WINAPI RemoveIScsiStaticTargetW(PWCHAR TargetName);

  HRESULT WINAPI RemovePersistentIScsiDeviceA(PCHAR VolumePath);
  HRESULT WINAPI RemovePersistentIScsiDeviceW(PWCHAR VolumePath);

  HRESULT WINAPI RemoveRadiusServerA(PCHAR Address);
  HRESULT WINAPI RemoveRadiusServerW(PWCHAR Address);

  HRESULT WINAPI SetupPersistentIScsiDevices(void);

  HRESULT WINAPI SendScsiInquiry(PISCSI_UNIQUE_SESSION_ID *UniqueSessionId,ULONGLONG Lun,UCHAR EvpdCmddt,UCHAR PageCode,PUCHAR *ScsiStatus,PULONG *ReponseSize,PUCHAR ReponseBuffer,PULONG *SenseSize,PUCHAR SenseBuffer);

  HRESULT WINAPI SendScsiReadCapacity(PISCSI_UNIQUE_SESSION_ID UniqueSessionId,ULONGLONG Lun,PUCHAR *ScsiStatus,PULONG *ResponseSize,PUCHAR ResponseBuffer,PULONG *SenseSize,PUCHAR SenseBuffer);

  HRESULT WINAPI SendScsiReportLuns(PISCSI_UNIQUE_SESSION_ID UniqueSessionId,PUCHAR *ScsiStatus,PULONG *ResponseSize,PUCHAR ResponseBuffer,PULONG *SenseSize,PUCHAR SenseBuffer);

typedef struct _ISCSI_DEVICE_ON_SESSION {
  TCHAR                 InitiatorName[MAX_ISCSI_HBANAME_LEN];
  TCHAR                 TargetName[MAX_ISCSI_NAME_LEN + 1];
  SCSI_ADDRESS          ScsiAddress;
  GUID                  DeviceInterfaceType;
  TCHAR                 DeviceInterfaceName[MAX_PATH];
  TCHAR                 LegacyName[MAX_PATH];
  STORAGE_DEVICE_NUMBER StorageDeviceNumber;
  DWORD                 DeviceInstance;
} ISCSI_DEVICE_ON_SESSION, *PISCSI_DEVICE_ON_SESSION;

HRESULT WINAPI GetDevicesForiSCSISession(
  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
  ULONG *DeviceCount,
  PISCSI_DEVICE_ON_SESSION Devices
);

#define GetIScsiIKEInfo __MINGW_NAME_AW(GetIScsiIKEInfo)

HRESULT WINAPI GetIScsiIKEInfoA(
  PCHAR InitiatorName,
  ULONG PortNumber,
  PULONG Reserved,
  PIKE_AUTHENTICATION_INFORMATION *AuthInfo
);

HRESULT WINAPI GetIScsiIKEInfoW(
  PWCHAR InitiatorName,
  ULONG PortNumber,
  PULONG Reserved,
  PIKE_AUTHENTICATION_INFORMATION *AuthInfo
);

#define GetIScsiInitiatorNodeName __MINGW_NAME_AW(GetIScsiInitiatorNodeName)

HRESULT WINAPI GetIScsiInitiatorNodeNameA(
    PCHAR InitiatorNodeName
);

HRESULT WINAPI GetIScsiInitiatorNodeNameW(
    PWCHAR InitiatorNodeName
);

#define GetIScsiSessionList __MINGW_NAME_AW(GetIScsiSessionList)

HRESULT WINAPI GetIScsiSessionListA(
  ULONG *BufferSize,
  ULONG *SessionCount,
  PISCSI_SESSION_INFOA SessionInfo
);

HRESULT WINAPI GetIScsiSessionListW(
  ULONG *BufferSize,
  ULONG *SessionCount,
  PISCSI_SESSION_INFOW SessionInfo
);

#define GetIScsiTargetInformation __MINGW_NAME_AW(GetIScsiTargetInformation)

HRESULT WINAPI GetIScsiTargetInformationA(
  PCHAR  TargetName,
  PCHAR  DiscoveryMechanism,
  TARGET_INFORMATION_CLASS InfoClass,
  PULONG BufferSize,
  PVOID Buffer
);

HRESULT WINAPI GetIScsiTargetInformationW(
  PWCHAR TargetName,
  PWCHAR DiscoveryMechanism,
  TARGET_INFORMATION_CLASS InfoClass,
  PULONG BufferSize,
  PVOID Buffer
);

HRESULT WINAPI GetIScsiVersionInformation(
    PISCSI_VERSION_INFO VersionInfo
);

HRESULT WINAPI LoginIScsiTargetA(
  PCHAR TargetName,
  BOOLEAN IsInformationalSession,
  PCHAR InitiatorName,
  ULONG InitiatorPortNumber,
  PISCSI_TARGET_PORTALA TargetPortal,
  ISCSI_SECURITY_FLAGS SecurityFlags,
  PISCSI_TARGET_MAPPINGA Mappings,
  PISCSI_LOGIN_OPTIONS LoginOptions,
  ULONG KeySize,
  PCHAR Key,
  BOOLEAN IsPersistent,
  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
  PISCSI_UNIQUE_CONNECTION_ID UniqueConnectionId
);

HRESULT WINAPI LoginIScsiTargetW(
  PWCHAR TargetName,
  BOOLEAN IsInformationalSession,
  PWCHAR InitiatorName,
  ULONG InitiatorPortNumber,
  PISCSI_TARGET_PORTALW TargetPortal,
  ISCSI_SECURITY_FLAGS SecurityFlags,
  PISCSI_TARGET_MAPPINGW Mappings,
  PISCSI_LOGIN_OPTIONS LoginOptions,
  ULONG KeySize,
  PCHAR Key,
  BOOLEAN IsPersistent,
  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
  PISCSI_UNIQUE_CONNECTION_ID UniqueConnectionId
);

HRESULT WINAPI LogoutIScsiTarget(
  PISCSI_UNIQUE_SESSION_ID UniqueSessionId
);

HRESULT WINAPI RefreshIScsiSendTargetPortalA(
  PCHAR InitiatorInstance,
  ULONG InitiatorPortNumber,
  PISCSI_TARGET_PORTALA Portal
);

HRESULT WINAPI RefreshIScsiSendTargetPortalW(
  PWCHAR InitiatorInstance,
  ULONG InitiatorPortNumber,
  PISCSI_TARGET_PORTALW Portal
);

#define RefreshIScsiSendTargetPortal __MINGW_NAME_AW(RefreshIScsiSendTargetPortal)

HRESULT WINAPI RefreshISNSServerA(
  PCHAR Address
);

HRESULT WINAPI RefreshISNSServerW(
  PWCHAR Address
);

#define RefreshISNSServer __MINGW_NAME_AW(RefreshISNSServer)

HRESULT WINAPI RemoveIScsiConnection(
  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
  PISCSI_UNIQUE_CONNECTION_ID UniqueConnectionId
);

HRESULT WINAPI RemoveIScsiPersistentTargetA(
  PCHAR InitiatorInstance,
  ULONG InitiatorPortNumber,
  PCHAR TargetName,
  PISCSI_TARGET_PORTALA Portal
);

HRESULT WINAPI RemoveIScsiPersistentTargetW(
  PWCHAR InitiatorInstance,
  ULONG InitiatorPortNumber,
  PWCHAR TargetName,
  PISCSI_TARGET_PORTALW Portal
);

#define RemoveIScsiPersistentTarget __MINGW_NAME_AW(RemoveIScsiPersistentTarget)

HRESULT WINAPI RemoveIScsiSendTargetPortalA(
  PCHAR InitiatorInstance,
  ULONG InitiatorPortNumber,
  PISCSI_TARGET_PORTALA Portal
);

HRESULT WINAPI RemoveIScsiSendTargetPortalW(
  PWCHAR InitiatorInstance,
  ULONG InitiatorPortNumber,
  PISCSI_TARGET_PORTALW Portal
);

#define RemoveIScsiSendTargetPortal __MINGW_NAME_AW(RemoveIScsiSendTargetPortal)

HRESULT WINAPI RemoveIScsiStaticTargetA(
  PCHAR TargetName
);

HRESULT WINAPI RemoveIScsiStaticTargetW(
  PWCHAR TargetName
);
#define RemoveIScsiStaticTarget __MINGW_NAME_AW(RemoveIScsiStaticTarget)

HRESULT WINAPI RemoveISNSServerA(
  PCHAR Address
);

HRESULT WINAPI RemoveISNSServerW(
  PWCHAR Address
);
#define RemoveISNSServer __MINGW_NAME_AW(RemoveISNSServer)

HRESULT WINAPI RemovePersistentIScsiDeviceA(
  PCHAR VolumePath
);

HRESULT WINAPI RemovePersistentIScsiDeviceW(
  PWCHAR VolumePath
);
#define RemovePersistentIScsiDevice __MINGW_NAME_AW(RemovePersistentIScsiDevice)

HRESULT WINAPI RemoveRadiusServerA(
  PCHAR Address
);

HRESULT WINAPI RemoveRadiusServerW(
  PWCHAR Address
);
#define RemoveRadiusServer __MINGW_NAME_AW(RemoveRadiusServer)

HRESULT WINAPI ReportIScsiInitiatorListA(
  ULONG *BufferSize,
  PCHAR Buffer
);

HRESULT WINAPI ReportIScsiInitiatorListW(
  ULONG *BufferSize,
  PWCHAR Buffer
);

HRESULT WINAPI ReportIScsiPersistentLoginsA(
  ULONG *Count,
  PPERSISTENT_ISCSI_LOGIN_INFOA PersistentLoginInfo,
  PULONG BufferSizeInBytes
);

HRESULT WINAPI ReportIScsiPersistentLoginsW(
  ULONG *Count,
  PPERSISTENT_ISCSI_LOGIN_INFOW PersistentLoginInfo,
  PULONG BufferSizeInBytes
);
#define ReportIScsiPersistentLogins __MINGW_NAME_AW(ReportIScsiPersistentLogins)

HRESULT WINAPI ReportIScsiSendTargetPortalsA(
  PULONG PortalCount,
  PISCSI_TARGET_PORTAL_INFOA PortalInfo
);

HRESULT WINAPI ReportIScsiSendTargetPortalsW(
  PULONG PortalCount,
  PISCSI_TARGET_PORTAL_INFOA PortalInfo
);

#define ReportIScsiSendTargetPortals __MINGW_NAME_AW(ReportIScsiSendTargetPortals)

HRESULT WINAPI ReportActiveIScsiTargetMappingsA(
  PULONG BufferSize,
  PULONG MappingCount,
  PISCSI_TARGET_MAPPINGA Mappings
);

HRESULT WINAPI ReportActiveIScsiTargetMappingsW(
  PULONG BufferSize,
  PULONG MappingCount,
  PISCSI_TARGET_MAPPINGW Mappings
);
#define ReportActiveIScsiTargetMappings __MINGW_NAME_AW(ReportActiveIScsiTargetMappings)

HRESULT WINAPI ReportIScsiSendTargetPortalsExA(
  PULONG PortalCount,
  PULONG PortalInfoSize,
  PISCSI_TARGET_PORTAL_INFO_EXA PortalInfo
);

HRESULT WINAPI ReportIScsiSendTargetPortalsExW(
  PULONG PortalCount,
  PULONG PortalInfoSize,
  PISCSI_TARGET_PORTAL_INFO_EXW PortalInfo
);

#define ReportIScsiSendTargetPortalsEx __MINGW_NAME_AW(ReportIScsiSendTargetPortalsEx)

HRESULT WINAPI ReportIScsiTargetPortalsA(
  PCHAR  InitiatorName,
  PCHAR  TargetName,
  PUSHORT TargetPortalTag,
  PULONG ElementCount,
  PISCSI_TARGET_PORTALA Portals
);

HRESULT WINAPI ReportIScsiTargetPortalsW(
  PWCHAR InitiatorName,
  PWCHAR TargetName,
  PUSHORT TargetPortalTag,
  PULONG ElementCount,
  PISCSI_TARGET_PORTALW Portals
);

#define ReportIScsiTargetPortals __MINGW_NAME_AW(ReportIScsiTargetPortals)

HRESULT WINAPI ReportIScsiTargetsA(
  BOOLEAN ForceUpdate,
  PULONG BufferSize,
  PCHAR  Buffer
);

HRESULT WINAPI ReportIScsiTargetsW(
  BOOLEAN ForceUpdate,
  PULONG BufferSize,
  PWCHAR Buffer
);
#define ReportIScsiTargets __MINGW_NAME_AW(ReportIScsiTargets)

HRESULT WINAPI ReportISNSServerListA(
  PULONG BufferSizeInChar,
  PCHAR  Buffer
);

HRESULT WINAPI ReportISNSServerListW(
  PULONG BufferSizeInChar,
  PWCHAR Buffer
);

#define ReportISNSServerList __MINGW_NAME_AW(ReportISNSServerList)

HRESULT WINAPI ReportPersistentiScsiDevicesA(
  PULONG BufferSizeInChar,
  PCHAR  Buffer
);

HRESULT WINAPI ReportPersistentiScsiDevicesW(
  PULONG BufferSizeInChar,
  PWCHAR Buffer
);

#define ReportPersistentiScsiDevices __MINGW_NAME_AW(ReportPersistentiScsiDevices)

HRESULT WINAPI ReportRadiusServerListA(
  PULONG BufferSizeInChar,
  PCHAR  Buffer
);

HRESULT WINAPI ReportRadiusServerListW(
  PULONG BufferSizeInChar,
  PCHAR  Buffer
);
#define ReportRadiusServerList __MINGW_NAME_AW(ReportRadiusServerList)

HRESULT WINAPI SendScsiReadCapacity(
  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
  ULONGLONG Lun,
  PUCHAR *ScsiStatus,
  PULONG *ResponseSize,
  PUCHAR ResponseBuffer,
  PULONG *SenseSize,
  PUCHAR SenseBuffer
);

HRESULT WINAPI SendScsiReportLuns(
  PISCSI_UNIQUE_SESSION_ID UniqueSessionId,
  PUCHAR *ScsiStatus,
  PULONG *ResponseSize,
  PUCHAR ResponseBuffer,
  PULONG *SenseSize,
  PUCHAR SenseBuffer
);

HRESULT WINAPI SendScsiInquiry(
  PISCSI_UNIQUE_SESSION_ID *UniqueSessionId,
  ULONGLONG Lun,
  UCHAR EvpdCmddt,
  UCHAR PageCode,
  PUCHAR *ScsiStatus,
  PULONG *ReponseSize,
  PUCHAR ReponseBuffer,
  PULONG *SenseSize,
  PUCHAR SenseBuffer
);

HRESULT WINAPI SetIScsiGroupPresharedKey(
  ULONG KeyLength,
  PUCHAR Key,
  BOOLEAN Persist
);

HRESULT WINAPI SetIScsiInitiatorCHAPSharedSecret(
  ULONG SharedSecretLength,
  PUCHAR SharedSecret
);

HRESULT WINAPI SetIScsiInitiatorNodeNameA(
  PCHAR InitiatorNodeName
);

HRESULT WINAPI SetIScsiInitiatorNodeNameW(
  PWCHAR InitiatorNodeName
);

#define SetIScsiInitiatorNodeName __MINGW_NAME_AW(SetIScsiInitiatorNodeName)

HRESULT WINAPI SetIscsiInitiatorRADIUSSharedSecret(
  ULONG SharedSecretLength,
  PUCHAR SharedSecret
);

HRESULT WINAPI SetIScsiTunnelModeOuterAddressA(
  PCHAR InitiatorName,
  ULONG InitiatorPortNumber,
  PCHAR DestinationAddress,
  PCHAR OuterModeAddress,
  BOOLEAN Persist
);

HRESULT WINAPI SetIScsiTunnelModeOuterAddressW(
  PWCHAR InitiatorName,
  ULONG  InitiatorPortNumber,
  PWCHAR DestinationAddress,
  PWCHAR OuterModeAddress,
  BOOLEAN Persist
);

#define SetIScsiTunnelModeOuterAddress __MINGW_NAME_AW(SetIScsiTunnelModeOuterAddress)

HRESULT WINAPI SetupPersistentIScsiDevices(void);

#ifdef __cplusplus
}
#endif
#endif /*(_WIN32_WINNT >= 0x0600)*/
#endif