Annotation of q_a/samples/ddk/smpi/smpi.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: #include <string.h>
                      3: #include <windows.h>
                      4: #include "smpi.h"
                      5: 
                      6: PCHAR string = "\\\\.\\Scsi0:";
                      7: PCHAR DbgString = "This string is in the data buffer area\n";
                      8: PCHAR UniqueString = "MyDrvr";
                      9: 
                     10: 
                     11: VOID main(VOID)
                     12: {
                     13:     BOOLEAN     bRc;
                     14:     DWORD       cbReturnedData;
                     15:     HANDLE      hDevice;
                     16:     SHORT       DbgStringLength = strlen(DbgString);
                     17:     SHORT       UniqueStringLength = strlen(UniqueString);
                     18:     SRB_BUFFER  smpi;
                     19: 
                     20: //*************************************************************
                     21: //
                     22: // obtain a handle to the SCSI miniport driver
                     23: //
                     24: //*************************************************************
                     25: 
                     26:     printf("Attempting to get a handle for %s\n",string);
                     27: 
                     28:     hDevice = CreateFile(string,
                     29:        GENERIC_READ,
                     30:        FILE_SHARE_READ,
                     31:        NULL,
                     32:        OPEN_EXISTING,
                     33:        0,
                     34:        NULL);
                     35: 
                     36:     if (hDevice == (HANDLE)-1)
                     37:        {
                     38:        printf("Attempt failed! Error number = %d\n",GetLastError());
                     39:        return;
                     40:        }
                     41: 
                     42:     printf("Attempt on %s succeeded\n\n",string);
                     43: 
                     44: //*************************************************************
                     45: //
                     46: // fill in the SRB_IO_CONTROL structure
                     47: //
                     48: //*************************************************************
                     49: 
                     50:     smpi.sic.HeaderLength = sizeof(SRB_IO_CONTROL);
                     51:     smpi.sic.Length = 0;
                     52: 
                     53:     _memccpy(&smpi.sic.Signature,UniqueString,0,UniqueStringLength);
                     54: 
                     55:     smpi.sic.Timeout = 10000;
                     56:     smpi.sic.ControlCode = SMP_RETURN_3F;
                     57: 
                     58: //*************************************************************
                     59: //
                     60: // call the driver
                     61: //
                     62: //*************************************************************
                     63: 
                     64:     bRc = DeviceIoControl(hDevice,                  // device handle
                     65:                 IOCTL_SCSI_MINIPORT,                // io control code
                     66:                 &smpi,                              // input buffer
                     67:                 sizeof(SRB_IO_CONTROL),             // input buffer length
                     68:                 &smpi,                              // output buffer
                     69:                 sizeof(SRB_IO_CONTROL),             // output buffer length
                     70:                 &cbReturnedData,                    // # bytes returned
                     71:                 NULL);                              // synchronous call
                     72: 
                     73: //*************************************************************
                     74: //
                     75: // check for errors
                     76: //
                     77: //*************************************************************
                     78: 
                     79:     if (!bRc)
                     80:        printf("DeviceIoControl request for SMP_RETURN_3F failed : %d\n",
                     81:           GetLastError());
                     82: 
                     83: //*************************************************************
                     84: //
                     85: // verify the driver's access to the SRB_IO_CONTROL structure
                     86: //
                     87: //*************************************************************
                     88:     
                     89:     else {
                     90:        printf("The SMP_RETURN_3F Return Code is 0x%08Xh\n",
                     91:           smpi.sic.ReturnCode);
                     92:        printf("The number of bytes returned by the driver is %d\n\n",
                     93:           cbReturnedData);
                     94:        }
                     95: 
                     96: //*************************************************************
                     97: //
                     98: // fill in the SRB_IO_CONTROL structure
                     99: //
                    100: //*************************************************************
                    101: 
                    102:     smpi.sic.HeaderLength = sizeof(SRB_IO_CONTROL);
                    103:     smpi.sic.Length = 100;                       // random large number
                    104: 
                    105:     _memccpy(&smpi.sic.Signature,UniqueString,0,UniqueStringLength);
                    106: 
                    107:     smpi.sic.Timeout = 0;
                    108:     smpi.sic.ControlCode = SMP_PRINT_STRING;
                    109: 
                    110:     strcpy(smpi.ucDataBuffer,DbgString);
                    111: 
                    112: //*************************************************************
                    113: //
                    114: // call the driver
                    115: //
                    116: //*************************************************************
                    117: 
                    118:     bRc = DeviceIoControl(hDevice,                  // device handle
                    119:                 IOCTL_SCSI_MINIPORT,                // io control code
                    120:                 &smpi,                              // input buffer
                    121:                 sizeof(SRB_IO_CONTROL) +            // input buffer length
                    122:                 DbgStringLength + 1,
                    123:                 &smpi,                              // output buffer
                    124:                 sizeof(SRB_IO_CONTROL) +            // output buffer length
                    125:                 100,                                // random large number
                    126:                 &cbReturnedData,                    // # bytes returned
                    127:                 NULL);                              // synchronous call
                    128: 
                    129: //*************************************************************
                    130: //
                    131: // check for errors
                    132: //
                    133: //*************************************************************
                    134: 
                    135:     if (!bRc)
                    136:        printf("DeviceIoControl request for SMP_PRINT_STRING failed : %d\n",
                    137:           GetLastError());
                    138: 
                    139: //*************************************************************
                    140: //
                    141: // verify the driver's access to the SRB_IO_CONTROL structure
                    142: //
                    143: //*************************************************************
                    144:     
                    145:     else {
                    146:        printf("%s",smpi.ucDataBuffer);
                    147:        printf("The number of bytes returned by the driver is %d\n\n",
                    148:           cbReturnedData);
                    149:        }
                    150: 
                    151: //*************************************************************
                    152: //
                    153: // close the handle to the SCSI miniport driver
                    154: //
                    155: //*************************************************************
                    156: 
                    157:     CloseHandle(hDevice);
                    158: }
                    159: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.