卷管理函数

 
今天研究 Volume Management Functions 部分的 api 函数:

这个部分函数包含两大块,第一块是卷管理,第二块是卷挂接

第一块中的函数包括:
DefineDosDevice, GetDriveType, GetLogicalDrives, GetLogicalDriveStrings, GetVolumeInformation, GetVolumeInformationByHandleW, SetVolumeLabel , QueryDosDevice
大部分函数都很常用,唯独没有研究过 DefineDosDevice 和 QueryDosDevice 这两个,需要看看有什么用。

第二块中的函数包括:
DeleteVolumeMountPoint, FindFirstVolume, FindFirstVolumeMountPoint, FindNextVolume, FindNextVolumeMountPoint, FindVolumeClose, FindVolumeMountPointClose, GetVolumeNameForVolumeMountPoint, GetVolumePathName, GetVolumePathNamesForVolumeName, SetVolumeMountPoint
基本上都没用过,更需要研究一下

---------------------------------------------------------------------------------------------------------
首先看看 QueryDosDevice 函数,MSDN 中解释是:
Retrieves information about MS-DOS device names. The function can obtain the current mapping for a particular MS-DOS device name. The function can also obtain a list of all existing MS-DOS device names.

好,我们来检索一下我们的系统中都存在那些 DOS 映射设备名

  1. LOCAL iSize, cBuff
  2. LOCAL ARRAY laDevs[1]
  3. DECLARE Long QueryDosDevice IN WIN32API ;
  4.   String lpDeviceName, String @ lpTargetPath, Long ucchMax
  5. CLOSE TABLES
  6. CREATE CURSOR temp ( name C(250))
  7. m.iSize = 0x5000
  8. m.cBuff = REPLICATE( CHR(0), m.iSize )
  9. QueryDosDevice( NULL, @ m.cBuff, m.iSize )
  10. ALINES( m.laDevs, m.cBuff, 1+4, CHR(0))
  11. m.cBuff = ''
  12. FOR m.ii = 1 TO ALEN( m.laDevs )
  13.   INSERT INTO temp ( name ) VALUES ( m.laDevs[m.ii] )
  14. ENDFOR
  15. DIMENSION laDevs[1]
  16. m.laDevs[1] = NULL
  17. SELECT LEN(RTRIM(name)) AS nlen, name ;
  18.     FROM temp INTO CURSOR dosdevs ORDER BY 1,2 READWRITE
  19. USE IN temp
  20. ALTER TABLE dosdevs DROP COLUMN nlen
  21. LOCATE
  22. BROWSE NOWAIT NAME oBrowser
  23. oBrowser.SetAll( 'DynamicBackColor', ;
  24.   'iif([IDE#]==left(name,4),rgb(255,0,0),rgb(255,255,255))' )

前面显示的都是些我们常见的 DOS 设备名,往后翻到有背景为红色行,这些是 IDE 设备,仔细看看那些硬盘设备,例如我的其中一个 120g 的盘是这样:
IDE#DiskMaxtor_6Y120L0__________________________YAR41BW0#33594b5059394557202020202020202020202020#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
可以看到:Maxtor_6Y120L0(硬盘厂商/型号),YAR41BW0(硬盘 Module 号),这个 33594b5059394557202020202020202020202020 是什么呢?这个就是我的意外发现,运行下面代码出结果:

  1. m.cWhatNo = '33594b5059394557202020202020202020202020'
  2. m.cResult = ''
  3. FOR m.ii = 1 TO INT(LEN( m.cWhatNo )/4)
  4.   m.cLow  = '0x' + SUBSTR( m.cWhatNo, (m.ii-1)*4+1, 2 )
  5.   m.cHigh = '0x' + SUBSTR( m.cWhatNo, (m.ii-1)*4+3, 2 )
  6.   m.cResult = m.cResult + CHR( EVALUATE( m.cHigh )) + CHR( EVALUATE( m.cLow ))
  7. ENDFOR
  8. ? RTRIM( m.cResult )

显示结果为:Y3PK9YWE,原来它就是我这块硬盘的出厂序列号!又一种获取序列号的方法诞生,只是不知适用性如何?QueryDosDevice 函数只能运行在 Win2000 以上的版本,所以至少 9x/Me 被排除了,好在现在应该没人用这些了。到现在为止,已经掌握的获取序列号的方法增加到了5 种,它们是: SCSI 后门 / Smart 参数 / IOCTL_STORAGE_QUERY_PROPERTY / WMI 以及这个方法。因为调用这个函数 MSDN 上没有特别指出需要什么权限,所以应该任何权限的用户都可以。

--------------------------------------------------------------------------------------------------------

继续研究 DefineDosDevice 函数
这个函数很简单,主要用于将一个盘符映射到一个已存在的文件夹,要注意到这个被映射的盘符是一个本地磁盘,而不是网络盘(例如使用 WNetAddConnection2 映射的网络驱动器)。这个函数返回 0 表示操作失败,返回 1 表示操作成功。一旦映射完成,“我的电脑”中就会出现一个新的盘符,你可以用它来快速访问一个包含在多层文件夹下的文件。如果你用过 DOS,它会使你想起一个 DOS 命令 SUBST !

  1. DECLARE Long DefineDosDevice IN WIN32API ;
  2.   Long dwFlags, String lpDeviceName, String lpTargetPath
  3. * 将 Windows 文件保护缓存文件夹映射到 K 盘
  4. DefineDosDevice( 0, 'K:''C:/WINDOWS/system32/dllcache' )
  5. * 移除这个映射盘
  6. * DefineDosDevice( 2, 'K:''C:/WINDOWS/system32/dllcache' )



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
TensorFlow中的`slim`函数是一个用于构建和管理神经网络的高级API。它是TensorFlow中的一个子模块,提供了一组方便的函数和类,可以简化模型的定义和训练过程。 `slim`函数主要用于定义神经网络的结构,包括积层、池化层、全连接层等。通过使用`slim`函数,你可以更加简洁地定义和组织复杂的神经网络模型。 下面是一个使用`slim`函数定义一个简单积神经网络的例子: ```python import tensorflow as tf import tensorflow.contrib.slim as slim def my_model(inputs): with slim.arg_scope([slim.conv2d, slim.fully_connected], activation_fn=tf.nn.relu): net = slim.conv2d(inputs, 32, [3, 3]) net = slim.max_pool2d(net, [2, 2]) net = slim.conv2d(net, 64, [3, 3]) net = slim.max_pool2d(net, [2, 2]) net = slim.flatten(net) net = slim.fully_connected(net, 128) net = slim.dropout(net, 0.5) outputs = slim.fully_connected(net, num_classes, activation_fn=None) return outputs # 构建输入张量 inputs = tf.placeholder(tf.float32, [None, 32, 32, 3]) # 构建模型 outputs = my_model(inputs) # ... 接下来可以进行训练、评估等操作 ``` 在这个例子中,通过调用`slim.conv2d`、`slim.max_pool2d`、`slim.fully_connected`等函数,可以方便地构建积神经网络。`slim.arg_scope`函数可以设置一些默认参数,使得代码更加简洁。 总的来说,`slim`函数提供了一种更加高级、便捷的方式来定义和管理神经网络模型,在TensorFlow中被广泛使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值