Annotation of q_a/samples/ddk/smpi/smpi.c, revision 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.