目前位置: VCer资源中心 >>> VCer论坛 >>> 技术问答

[本帖已阅读2989次 分值2 回复10次] 张贴资源 发回信箱 控制面板

怎么实现关机(重启)时检测USB的存储设备!

提供者:lxwxiao 张贴时间:2004-05-24 17:09:08.0 出处:vcer.net 作者:不祥

怎么实现关机(重启)时检测USB的存储设备!(2004-05-24 17:09:08.0)


new


 
级别: VCer小兵
头衔: VCer会员

经验: 194
作品: 9
分会: 华北分会
注册: 2004-05-24 17:01:41.0
登录: 2004-06-23 13:30:26.0

怎么实现关机(重启)时检测USB的存储设备,当发现USB存储设备(U盘等)则中断关机(重启)操作并提示。

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/2279.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]

re:怎么实现关机(重启)时检测USB的存储设备!
其实GetDriveType()就能实现这个功能了

lxwxiao 于 2004-06-02 10:00:36.0 编辑 [回复该贴]

re:怎么实现关机(重启)时检测USB的存储设备!

这个还是不能检测移动硬盘!这个是MSDN的一个例子我加了一句以判断设备媒体类型。CSDN上有相关文章。俺只是个初学者望大家以后多多指点!谢谢了

#include <windows.h>

#include <winioctl.h>

 

BOOL GetDriveGeometry(DISK_GEOMETRY *pdg)

{

    HANDLE hDevice;               // handle to the drive to be examined

    BOOL bResult;                 // results flag

    DWORD junk;                   // discard results

  

    hDevice = CreateFile(\\\\.\\PhysicalDrive0,  // drive to open. PhysicalDrive1;a:;c:;...

                            0,                // no access to the drive

                    FILE_SHARE_READ | // share mode

                    FILE_SHARE_WRITE,

                    NULL,             // default security attributes

                    OPEN_EXISTING,    // disposition

                    0,                // file attributes

                    NULL);            // do not copy file attributes

 

    if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive

    {

        return (FALSE);

    }

 

    bResult = DeviceIoControl(hDevice,     // device to be queried

        IOCTL_DISK_GET_DRIVE_GEOMETRY,     // operation to perform

                    NULL, 0,               // no input buffer

                    pdg, sizeof(*pdg),     // output buffer

                    &junk,                 // # bytes returned

                    (LPOVERLAPPED) NULL);  // synchronous I/O

 

    CloseHandle(hDevice);

 

    return (bResult);

}

 

int main(int argc, char *argv[])

{

    DISK_GEOMETRY pdg;            // disk drive geometry structure

    BOOL bResult;                 // generic results flag

    ULONGLONG DiskSize;           // size of the drive, in bytes

 

    bResult = GetDriveGeometry (&pdg);

 

    if (bResult)

    {

        printf("MediaType = %d\n", pdg.MediaType);

  printf("Cylinders = %I64d\n", pdg.Cylinders);

        printf("Tracks per cylinder = %ld\n", (ULONG) pdg.TracksPerCylinder);

        printf("Sectors per track = %ld\n", (ULONG) pdg.SectorsPerTrack);

        printf("Bytes per sector = %ld\n", (ULONG) pdg.BytesPerSector);

 

        DiskSize = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder *

        (ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector;

        printf("Disk size = %I64d (Bytes) = %I64d (Mb)\n", DiskSize,

        DiskSize / (1024 * 1024));

    }

    else

    {

        printf("GetDriveGeometry failed. Error %ld.\n", GetLastError());

    }

 

    return ((int)bResult);

}

lxwxiao 于 2004-06-02 09:52:37.0 编辑 [回复该贴]

re:怎么实现关机(重启)时检测USB的存储设备!

能将你代码整理一下,放到vcer上么

好像大多数人都不会

希望能提供源代码,谢谢!

xler 于 2004-06-01 21:09:27.0 编辑 [回复该贴]

re:怎么实现关机(重启)时检测USB的存储设备!
搞定了,把winioctl.h的位置换一下就好了!

lxwxiao 于 2004-06-01 17:17:02.0 编辑 [回复该贴]

re:怎么实现关机(重启)时检测USB的存储设备!
UP一下,大哥帮忙看看啊!

lxwxiao 于 2004-05-31 09:45:26.0 编辑 [回复该贴]

re:怎么实现关机(重启)时检测USB的存储设备!

据说这个可以实现,但我在编译时出错?附源码及错误!大家帮我看看啊!谢谢了先

#include "Winioctl.h"

  HANDLE hDisk = CreateFile("\\\\.\\X:",

             GENERIC_READ,

                             FILE_SHARE_READ,

                             NULL,

             OPEN_EXISTING,

             FILE_ATTRIBUTE_NORMAL,

                             NULL

            );

   if (hDisk != INVALID_HANDLE_VALUE)

   {

    DISK_GEOMETRY         dgDisk;

    if (DeviceIoControl(hDisk,       IOCTL_DISK_GET_DRIVE_GEOMETRY,

                  NULL,

  0,

  &dgDisk,

  sizeof(dgDisk),

  &dwNotUsed,

  NULL))

    {

               if(dgDisk.MediaType == RemovableMedia)  //是否移动硬盘

               {

           // 是

                  ....

 

              }

             }

    CloseHandle(hDisk);

就加Winioctl.h这个头文件就出错,是不是差什么东西?

d:\microsoft visual studio\vc98\include\winioctl.h(179) : error C2146: syntax error : missing ';' before identifier 'DeviceType'

d:\microsoft visual studio\vc98\include\winioctl.h(179) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(179) : error C2501: 'DeviceType' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(185) : error C2146: syntax error : missing ';' before identifier 'DeviceNumber'

d:\microsoft visual studio\vc98\include\winioctl.h(185) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(185) : error C2501: 'DeviceNumber' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(192) : error C2146: syntax error : missing ';' before identifier 'PartitionNumber'

d:\microsoft visual studio\vc98\include\winioctl.h(192) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(192) : error C2501: 'PartitionNumber' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(200) : error C2146: syntax error : missing ';' before identifier 'PathId'

d:\microsoft visual studio\vc98\include\winioctl.h(200) : error C2501: 'BYTE' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(200) : error C2501: 'PathId' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(214) : error C2146: syntax error : missing ';' before identifier 'PreventMediaRemoval'

d:\microsoft visual studio\vc98\include\winioctl.h(214) : error C2501: 'BOOLEAN' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(214) : error C2501: 'PreventMediaRemoval' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(221) : error C2146: syntax error : missing ';' before identifier 'Version'

d:\microsoft visual studio\vc98\include\winioctl.h(221) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(221) : error C2501: 'Version' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(222) : error C2146: syntax error : missing ';' before identifier 'Flags'

d:\microsoft visual studio\vc98\include\winioctl.h(222) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(222) : error C2501: 'Flags' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(223) : error C2146: syntax error : missing ';' before identifier 'RecoveredWrites'

d:\microsoft visual studio\vc98\include\winioctl.h(223) : error C2501: 'LARGE_INTEGER' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(223) : error C2501: 'RecoveredWrites' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(224) : error C2146: syntax error : missing ';' before identifier 'UnrecoveredWrites'

d:\microsoft visual studio\vc98\include\winioctl.h(224) : error C2501: 'LARGE_INTEGER' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(224) : error C2501: 'UnrecoveredWrites' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(225) : error C2146: syntax error : missing ';' before identifier 'RecoveredReads'

d:\microsoft visual studio\vc98\include\winioctl.h(225) : error C2501: 'LARGE_INTEGER' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(225) : error C2501: 'RecoveredReads' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(226) : error C2146: syntax error : missing ';' before identifier 'UnrecoveredReads'

d:\microsoft visual studio\vc98\include\winioctl.h(226) : error C2501: 'LARGE_INTEGER' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(226) : error C2501: 'UnrecoveredReads' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(227) : error C2146: syntax error : missing ';' before identifier 'CompressionRatioReads'

d:\microsoft visual studio\vc98\include\winioctl.h(227) : error C2501: 'BYTE' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(227) : error C2501: 'CompressionRatioReads' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(228) : error C2146: syntax error : missing ';' before identifier 'CompressionRatioWrites'

d:\microsoft visual studio\vc98\include\winioctl.h(228) : error C2501: 'BYTE' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(228) : error C2501: 'CompressionRatioWrites' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(239) : error C2146: syntax error : missing ';' before identifier 'Operation'

d:\microsoft visual studio\vc98\include\winioctl.h(239) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(239) : error C2501: 'Operation' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(341) : error C2146: syntax error : missing ';' before identifier 'Cylinders'

d:\microsoft visual studio\vc98\include\winioctl.h(341) : error C2501: 'LARGE_INTEGER' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(341) : error C2501: 'Cylinders' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(343) : error C2146: syntax error : missing ';' before identifier 'TracksPerCylinder'

d:\microsoft visual studio\vc98\include\winioctl.h(343) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(343) : error C2501: 'TracksPerCylinder' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(344) : error C2146: syntax error : missing ';' before identifier 'SectorsPerTrack'

d:\microsoft visual studio\vc98\include\winioctl.h(344) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(344) : error C2501: 'SectorsPerTrack' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(345) : error C2146: syntax error : missing ';' before identifier 'BytesPerSector'

d:\microsoft visual studio\vc98\include\winioctl.h(345) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(345) : error C2501: 'BytesPerSector' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(346) : error C2146: syntax error : missing ';' before identifier 'NumberMediaSides'

d:\microsoft visual studio\vc98\include\winioctl.h(346) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(346) : error C2501: 'NumberMediaSides' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(347) : error C2146: syntax error : missing ';' before identifier 'MediaCharacteristics'

d:\microsoft visual studio\vc98\include\winioctl.h(347) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(347) : error C2501: 'MediaCharacteristics' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(351) : error C2146: syntax error : missing ';' before identifier 'Cylinders'

d:\microsoft visual studio\vc98\include\winioctl.h(351) : error C2501: 'LARGE_INTEGER' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(351) : error C2501: 'Cylinders' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(353) : error C2146: syntax error : missing ';' before identifier 'TracksPerCylinder'

d:\microsoft visual studio\vc98\include\winioctl.h(353) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(353) : error C2501: 'TracksPerCylinder' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(354) : error C2146: syntax error : missing ';' before identifier 'SectorsPerTrack'

d:\microsoft visual studio\vc98\include\winioctl.h(354) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(354) : error C2501: 'SectorsPerTrack' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(355) : error C2146: syntax error : missing ';' before identifier 'BytesPerSector'

d:\microsoft visual studio\vc98\include\winioctl.h(355) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(355) : error C2501: 'BytesPerSector' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(356) : error C2146: syntax error : missing ';' before identifier 'NumberMediaSides'

d:\microsoft visual studio\vc98\include\winioctl.h(356) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(356) : error C2501: 'NumberMediaSides' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(357) : error C2146: syntax error : missing ';' before identifier 'MediaCharacteristics'

d:\microsoft visual studio\vc98\include\winioctl.h(357) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(357) : error C2501: 'MediaCharacteristics' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(362) : error C2146: syntax error : missing ';' before identifier 'MediaCharacteristics'

d:\microsoft visual studio\vc98\include\winioctl.h(362) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(362) : error C2501: 'MediaCharacteristics' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(363) : error C2146: syntax error : missing ';' before identifier 'CurrentBlockSize'

d:\microsoft visual studio\vc98\include\winioctl.h(363) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(363) : error C2501: 'CurrentBlockSize' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(369) : error C2146: syntax error : missing ';' before identifier 'DeviceType'

d:\microsoft visual studio\vc98\include\winioctl.h(369) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(369) : error C2501: 'DeviceType' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(370) : error C2146: syntax error : missing ';' before identifier 'MediaInfoCount'

d:\microsoft visual studio\vc98\include\winioctl.h(370) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(370) : error C2501: 'MediaInfoCount' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(571) : error C2146: syntax error : missing ';' before identifier 'StartCylinderNumber'

d:\microsoft visual studio\vc98\include\winioctl.h(571) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(571) : error C2501: 'StartCylinderNumber' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(572) : error C2146: syntax error : missing ';' before identifier 'EndCylinderNumber'

d:\microsoft visual studio\vc98\include\winioctl.h(572) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(572) : error C2501: 'EndCylinderNumber' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(573) : error C2146: syntax error : missing ';' before identifier 'StartHeadNumber'

d:\microsoft visual studio\vc98\include\winioctl.h(573) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(573) : error C2501: 'StartHeadNumber' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(574) : error C2146: syntax error : missing ';' before identifier 'EndHeadNumber'

d:\microsoft visual studio\vc98\include\winioctl.h(574) : error C2501: 'DWORD' : missing storage-class or type specifiers

d:\microsoft visual studio\vc98\include\winioctl.h(574) : fatal error C1003: error count exceeds 100; stopping compilation

Error executing cl.exe.

Creating browse info file...

BSCMAKE: error BK1506 : cannot open file '.\Debug\BindDlg.sbr': No such file or directory

Error executing bscmake.exe.

Bind.exe - 103 error(s), 0 warning(s)

lxwxiao 于 2004-05-28 17:38:06.0 编辑 [回复该贴]

re:怎么实现关机(重启)时检测USB的存储设备!

界个好难啊,偶不知道呢~

bluejoe 于 2004-05-27 13:18:20.0 编辑 [回复该贴]

re:怎么实现关机(重启)时检测USB的存储设备!

 自己顶一下!

lxwxiao 于 2004-05-27 10:26:23.0 编辑 [回复该贴]

re:怎么实现关机(重启)时检测USB的存储设备!

斑竹大哥来帮帮忙啊!拜托了啊!

lxwxiao 于 2004-05-25 18:34:56.0 编辑 [回复该贴]

re:怎么实现关机(重启)时检测USB的存储设备!

没人会吗?

lxwxiao 于 2004-05-25 14:52:22.0 编辑 [回复该贴]