《Windows核心编程》---逻辑驱动器操作

Windows文件系统:探索Windows操作系统的文件结构与编程 每个驱动器下面可以有一个或多个文件夹(Folder),文件夹可以包含其他文件夹或文件。文件夹可以看作是一种特殊的文件,它用于组织和存储其他文件。Windows文件系统是Windows操作系统的核心组成部分之一,通过层次结构来组织和管理文件和文件夹。文件系统编程接口为开发人员提供了灵活和强大的工具,以满足各种文件系统操作的需求。Windows文件系统是一种组织和管理计算机上文件和文件夹的结构。通过使用其他文件系统编程接口,您可以执行更多文件和文件夹的操作,如读取和写入文件内容,重命名文件,获取文件属性等。 阅读详情

Windows中的文件组织方式采用分层次的结构:计算机中可以安装有多个物理驱动器,每个物理驱动器可以分为多个主分区和扩展分区,每个主分区就是一个逻辑驱动器,而每个扩展分区可以划分为多个逻辑驱动器,逻辑驱动器组成我们熟悉的C盘与D盘等盘符。

对于每个逻辑驱动器,可以给它取一个标号叫做“卷标”,卷标是当作一个目录项存放在逻辑驱动器的根目录中的。

 

逻辑驱动器操作:

SetVolumeLabel函数用来为一个驱动器创建、修改以及删除卷标:

BOOL WINAPI SetVolumeLabel(

  __in_opt  LPCTSTR lpRootPathName, //要设置卷标的逻辑驱动器根目录,如“c:/”

  __in_opt  LPCTSTR lpVolumeName //指向包含卷标字符串的缓冲区

);

 

要检测系统中当前存在多少个逻辑驱动器可以使用GetLogicalDrives函数,函数返回所有可用的盘符:

DWORD WINAPI GetLogicalDrives(void);

函数返回一个32位整数,用其中的每一位代表是否存在一个逻辑驱动器。由于系统中可用的盘符仅有26个(A:~Z:),所以32位已经可以反映出所有的逻辑驱动器,以及它们的盘符分布情况了。返回值的第0位到第25位分别代表驱动器A:~Z:是否存在。

 

函数GetLogicalDriveStrings返回字符串类型的逻辑驱动器列表:

DWORD WINAPI GetLogicalDriveStrings(

  __in   DWORD nBufferLength, //缓冲区大小,如果缓冲区不够大,后面的数据会被截断

  __out  LPTSTR lpBuffer //指向一个缓冲区,函数在这里返回"A:/", 0, "B:/", 0,"C:/", 0, 0

//格式的字符串,字符串列表以一个附加的0结束

);

 

函数GetDriveType用来检测驱动器类型:

UINT WINAPI GetDriveType(

  __in_opt  LPCTSTR lpRootPathName //指向存放有逻辑驱动器根目录的字符串的缓冲区

);

函数返回值是逻辑驱动器的类型:

0       //驱动器类型无法检测

1       //指定的根目录不存在

DRIVE_REMOVABLE    //可移动介质,如软盘

DRIVE_FIXED                   // 固定盘,如硬盘中的逻辑驱动器

DRIVE_REMOTE   //远程驱动器,如网络上映射的驱动器

DRIVE_CDROM    //光盘

DRIVE_RAMDISK  //内存虚拟盘

 

函数GetVolumeInformation用来获得逻辑驱动器的卷标、序列号和文件系统类型等属性:

BOOL WINAPI GetVolumeInformation(

  __in_opt   LPCTSTR lpRootPathName, //指向需要检测的驱动器根目录字符串,如果要检测的是网络

                            //上的驱动器,字符串的格式是:“//服务器名//共享名”

  __out      LPTSTR lpVolumeNameBuffer, //指向返回驱动器的卷标的缓冲区

  __in       DWORD nVolumeNameSize, //上述缓冲区大小

  __out_opt  LPDWORD lpVolumeSerialNumber, //指向返回逻辑驱动器序列号的缓冲区

                   //序列号是驱动器被格式化时由系统随机生成的一个32位数,它保存于驱动器第一个扇区

                   //的引导记录中

  __out_opt  LPDWORD lpMaximumComponentLength, //指向返回最大允许的文件名长度的缓冲区,

                   //在Windows系统中,一般这个数值是255

  __out_opt  LPDWORD lpFileSystemFlags, //返回逻辑驱动器的属性标记…

  __out      LPTSTR lpFileSystemNameBuffer, //用于接收文件系统字符串,函数在这里返回类似于

                                                        //FAT、FAT32、NTFS类型的字符串

  __in       DWORD nFileSystemNameSize //上述缓冲区大小

);

 

GetDiskFreeSpace函数用来检测逻辑驱动器剩余空间:

BOOL WINAPI GetDiskFreeSpace(

  __in   LPCTSTR lpRootPathName, //指向需要检测的驱动器根目录字符串

  __out  LPDWORD lpSectorsPerCluster, //返回每簇扇区数

  __out  LPDWORD lpBytesPerSector, //返回每扇区字节数

  __out  LPDWORD lpNumberOfFreeClusters, //返回驱动器中未使用的簇的数量

  __out  LPDWORD lpTotalNumberOfClusters //返回驱动器中簇的总数

);

 

下面的实例代码演示了从一个文件句柄获得文件名字,使用到了GetLogicalDriveStrings函数:

#include <windows.h>

#include <stdio.h>

#include <tchar.h>

#include <string.h>

#include <psapi.h>

#include <strsafe.h>

 

#define BUFSIZE 512

 

BOOL GetFileNameFromHandle(HANDLE hFile)

{

  BOOL bSuccess = FALSE;

  TCHAR pszFilename[MAX_PATH+1];

  HANDLE hFileMap;

 

  // Get the file size.

  DWORD dwFileSizeHi = 0;

  DWORD dwFileSizeLo = GetFileSize(hFile, &dwFileSizeHi);

 

  if( dwFileSizeLo == 0 && dwFileSizeHi == 0 )

  {

     printf("Cannot map a file with a length of zero./n");

     return FALSE;

  }

 

  // Create a file mapping object.

  hFileMap = CreateFileMapping(hFile,

                    NULL,

                    PAGE_READONLY,

                    0,

                    1,

                    NULL);

 

  if (hFileMap)

  {

    // Create a file mapping to get the file name.

    void* pMem = MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 1);

 

    if (pMem)

    {

      if (GetMappedFileName (GetCurrentProcess(),

                             pMem,

                             pszFilename,

                             MAX_PATH))

      {

 

        // Translate path with device name to drive letters.

        TCHAR szTemp[BUFSIZE];

        szTemp[0] = '/0';

 

        if (GetLogicalDriveStrings(BUFSIZE-1, szTemp))

        {

          TCHAR szName[MAX_PATH];

          TCHAR szDrive[3] = TEXT(" :");

          BOOL bFound = FALSE;

          TCHAR* p = szTemp;

 

          do

          {

            // Copy the drive letter to the template string

            *szDrive = *p;

 

            // Look up each device name

            if (QueryDosDevice(szDrive, szName, MAX_PATH))

            {

              UINT uNameLen = _tcslen(szName);

 

              if (uNameLen < MAX_PATH)

              {

                bFound = _tcsnicmp(pszFilename, szName, uNameLen) == 0;

 

                if (bFound && *(pszFilename + uNameLen) == _T('//'))

                {

                  // Reconstruct pszFilename using szTempFile

                  // Replace device path with DOS path

                  TCHAR szTempFile[MAX_PATH];

                  StringCchPrintf(szTempFile,

                            MAX_PATH,

                            TEXT("%s%s"),

                            szDrive,

                            pszFilename+uNameLen);

                  StringCchCopyN(pszFilename, MAX_PATH+1, szTempFile, _tcslen(szTempFile));

                }

              }

            }

 

            // Go to the next NULL character.

            while (*p++);

          } while (!bFound && *p); // end of string

        }

      }

      bSuccess = TRUE;

      UnmapViewOfFile(pMem);

    }

 

    CloseHandle(hFileMap);

  }

  _tprintf(TEXT("File name is %s/n"), pszFilename);

  return(bSuccess);

}

 

int _tmain(int argc, TCHAR *argv[])

{

    HANDLE hFile;

 

    if( argc != 2 )

    {

        printf("This sample takes a file name as a parameter./n");

        return 0;

    }

    hFile = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ, NULL,

        OPEN_EXISTING, 0, NULL);

 

    if(hFile == INVALID_HANDLE_VALUE)

    {

        printf("CreateFile failed with %d/n", GetLastError());

        return 0;

    }

    GetFileNameFromHandle( hFile );

}

C#编程中如何检索硬盘制造商和硬盘序列号 API是一套定义、协议和工具的集合,它能够帮助开发者编写软件。它提供了一组预定义的函数和方法,这些函数和方法封装了特定的功能。对Windows API来说,这些功能包括了几乎所有的Windows操作,从窗口管理到硬件接口,无所不包。P/Invoke(Platform Invocation Services)是.NET框架中一种允许托管代码调用非托管代码(如Win32 API)的机制。它通过在C#中声明外部函数,使得开发者可以访问底层操作系统或第三方库的功能。 阅读详情

相关推荐

关于WinServer2008中硬盘逻辑分区的创建

关于WinServer2008中硬盘逻辑分区创建的经验

8.2 驱动器和目录

8.2 驱动器和目录

qq_36314864的博客 1000

基于浏览器插件的拼多多买家订单导出方法

基于浏览器插件的拼多多买家订单导出方法

2501_93542170的博客 1718

GetDriveType , DRIVE_FIXED ,DRIVE_REMOVABLE,DRIVE_CDROM

GetDriveType 判断一个磁盘驱动器的类型 返回值:Long,如驱动器不能识别,则返回零。如指定的目录不存在,则返回1。如执行成功,则用下述任何一个常数指定驱动器类型:DRIVE_REMOVABLE, DRIVE_FIXED, DRIVE_REMOTE, DRIVE_CDROM 或 DRIVE_RAMDISK 头文件在“winbase.h” UINT GetDriveType( ...

qq_41786318的博客 3672

ROS环境下UR机械臂与Realsense相机手眼标定实战指南

本文提供了在ROS环境下,对UR机械臂与Realsense相机进行手眼标定的完整实战指南。详细介绍了从环境搭建、软件包安装、硬件配置到分步数据采集与计算的完整流程,并分享了常见的避坑技巧与精度优化方法,旨在帮助开发者高效、准确地完成标定,为后续的机器人视觉应用奠定坚实基础。

sunny的博客 647

Word标题样式基准重置:彻底解决重新打开后自动缩进问题

本文深入剖析了Word文档中标题样式在重新打开后自动缩进问题的根源,并提供了两种根治方案。通过调整标题样式基准或将其设为“无样式”,并配合检查修正多级列表设置,可彻底解决这一常见格式顽疾,确保文档格式的稳定性与专业性。

weixin_29266647的博客 526

物理驱动器 和逻辑分区的区别与联系

区别逻辑分区也就是我们平时常说的C盘、D盘, 物理驱动器平时很少使用,通常在安装操作系统的界面上可以看到。win7系统中的物理驱动器和逻辑分区Win7系统下查看物理驱动器和逻辑分区的方法如下: 物理驱动器与逻辑分区是一对一或一对多的关系。 例如上图中,disk0包含C,D,E,F四个逻辑分区,disk0是电脑中的硬盘。 disk1只包含一个逻辑分区I,disk1是可移动磁盘也就是常说的U

zfs2008zfs的博客 5772

在 AS ABAP 7.40 SP05 里把 HANA 存储过程纳入 ABAP 生命周期:AMDP 实战示例与踩坑笔记

文章摘要:AMDP(ABAP Managed Database Procedures)是SAP推出的框架,用于在ABAP中管理数据库端的存储过程或函数,特别适用于HANA数据库。它通过将数据库语言(如SQLScript)嵌入ABAP方法,实现数据处理逻辑的"下推"(code pushdown),减少应用层与数据库间的数据传输。AMDP适用于需要数据库特有能力或大规模数据处理的场景,但应优先考虑Open SQL或ABAP CDS等更简单的方案。开发时需注意数据库类型检查、参数前缀(:)等语

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 225

用 C# 和 WMI 获取逻辑驱动器详细信息

【本文已在天极首发】在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获...

clj2012的博客 244

基于YOLOv8深度学习的夜视行人检测系统:UI界面 + YOLOv8 + 数据集的实现

为了解决这一问题,基于深度学习的行人检测技术,尤其是YOLO(You Only Look Once)系列算法,成为了一个有效的解决方案。本文将详细介绍如何构建一个夜视行人检测系统,利用YOLOv8模型实现高效的行人检测,并设计用户友好的界面以便于使用。本博客详细介绍了如何构建一个基于深度学习的夜视行人检测系统,包括数据准备、YOLOv8模型训练、用户界面设计和实时监控模块的实现。为了将数据集转换为YOLO格式,我们需要确保每个图像文件都有一个对应的标签文件,标签文件中包含行人的边界框信息。

YOLO 1172

基于加速科技ST2500的SN74HC00N芯片测试计划

实际上随着工艺的进步,器件内部和引脚间的绝缘氧化膜越来越薄,导致漏电流发生的概率更大,另外制造过程中的工艺缺陷导致的桥接,异物或封装过程中造成的芯片划伤、引裂,都会造成IC的漏电流偏大,有部分产品可能会表现出漏电流偏大,但功能正常,此类产品具有潜在的可靠性问题,漏电流测试的目的就是把具有此类缺陷的产品筛选出来,避免其流到最终产品造成更大的损失。漏电流的测试方法相对简单,就是根据产品手册或测试规范对被测引脚施加额定的电压,然后测量其输入或流出的电流是否符合相应的设计规范。74HC00引脚功能如表所示。

weixin_68288412的博客 1434

使用Windows API函数来获取磁盘分区信息(附带源码)

使用Windows API函数来获取磁盘分区信息(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 602

时序预测 | MATLAB实现NGM(1,1)多变量灰色时间序列预测

时序预测 | MATLAB实现NGM(1,1)多变量灰色时间序列预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1514

对硬盘操作的API介绍以及应用测试

磁盘和驱动器管理API GetLogicalDrivers       获取主机中所有的逻辑驱动器,以BitMap的形式返回. GetLogicalDriverString    获取主机中所有的逻辑驱动器,以驱动器根路径字符串返回. FindFirstVolume     查找主机中的第一个驱动器,返回查找句柄. FindNextVolume      根据FindFirstVolume

2817

L2正则化与Ridge回归的关系

非常感谢您提供的详细任务描述和要求。我会尽力按照您的指引来撰写这篇技术博客文章。 L2正则化与Ridge回归的关系 1. 背景介绍 机器学习模型在训练过程中容易出现过拟合的问题,这会导致模型在训练集上表现很好但在测试集上泛化性能较差。为了解决这一问题,正则化技术应运而生。其中

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 657

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

GetLogicalDriveStrings FindFirstVolume和FindNextVolume

GetLogicalDriveStrings GetLogicalDriveStrings(BUFSIZE - 1, szLogicalDriveStrings); 函数功能: 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径。 函数原型: DWORD GetLogicalDriveStrings(DWORD nBufferLength, // size of buffer LPTSTR lpBuffer // drive strings buffer ); 第一个参数 DODOWRD cc

寻梦&之璐 803

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

用C#和WMI获取逻辑驱动器详细信息

 在编写某些Windows管理应用程序时,能够从自定义的驱动器选择列表框中进行选择无疑是非常专业的,使用Delphi或者C++的早期版本时我们都必须使用Win32所提供的许多关于获取磁盘信息的API函数来分别获取像卷标、序列号以及剩余空间等信息,现在我们将使用.Net框架和WMI(Windows Management Instrumentation - Windows 管理规范 )来实现上述功能。

Mark的专栏 894

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

用C#和WMI获取逻辑驱动器详细信息(驱动器类型,文件系统,剩余空间等)

今天有同事问及获取逻辑分区相关信息,如:文件系统,剩余空间等的途径.余只在印象中记得调用WIN32 API可实现.但是似有不妥,于是乎稍查了一下资料,提供如下通过WMI(Windows Management Instrumentation - Windows 管理规范)来获取相关信息的方法. WMI最初是内置在 Windows 2000、Windows  XP 和 Windows  Ser

simonezhlx的专栏 1706

《精通Windows API-函数、接口、编程实例》——第4章文件系统

第4章文件系统 4.2 磁盘和驱动器管理 文件系统的基本概念:包括磁盘分区,卷,目录,文件对象,文件句柄,文件映射1.磁盘分区:物理磁盘,逻辑磁盘2.卷:也称逻辑驱动器,是NTFS,FAT32等文件系统组织结构的最高层.卷是存储设备(硬盘)上由文件系统管理的一块区域,在逻辑上相互隔离的存储单元. windows命名规则:主文件名+扩展名windows中文件...

weixin_30340819的博客 391

方法:如何获取操作系统所有分区(逻辑驱动器)

http://www.cnblogs.com/xuesongshu/   因为在网上搜到的一些方法比较繁锁,而且互相抄袭,所以在这里写一个新的方法。只写算法哦。 DWORD dwDrive=::GetLogicalDrives(); LPSTR szDrive=(LPSTR)...

cheqiane9431的博客 175

003 Windows I/O操作

#Windows I/O操作   在Windows 程序中,基础的运行单元位线程!为每一个线程分配一个处理器,可以让系统执行多个操作!当线程运行一个IO操作时,会被挂起,从而影响性能!位解决这类问题,Windows使用了一套非常好的机制I/O完成端口接下来我们将学习Windows中的相关操作。 摘抄与维基百科 I/O(英语:Input/Output),即输入/输...

afqz46812的博客 160
上一篇: 《ASCE1885的武术》---搬头
下一篇: 《Windows核心编程》---执行可执行文件
ACE1985
博客等级 码龄17年 1307粉丝 308原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值