здравствуйте вообщем нужно корректно научиться получать идентификатор тома cd диска в Linux чтоб он был такой же как и в windows я использую алгоритм
C++ (Qt)
#include <stdio.h>
 
#define SEC_SIZE 2048
#define VD_N 16
 
unsigned cdid(unsigned char pvd[SEC_SIZE])
    {
    unsigned char part[4] = {0};
    int i;
 
    for(i = 0; i < SEC_SIZE; i += 4)
        {
        part[3] += pvd[i + 0];
        part[2] += pvd[i + 1];
        part[1] += pvd[i + 2];
        part[0] += pvd[i + 3];
        }
 
    return (part[3] << 24) + (part[2] << 16) + (part[1] << 8) + part[0];
    }
 
int main(int argc, char *argv[])
    {
    FILE *in;
    unsigned char buf[SEC_SIZE];
 
    if(argc != 2)
        {
        fprintf(stderr, "Call: cdid /dev/path\n");
        return 1;
        }
 
    /* Open device */
    in = fopen(argv[1], "rb");
    if(in == NULL)
        {
        perror(NULL);
        return 2;
        }
 
    /* Seek to primary volume descriptor */
    if(fseek(in, VD_N * SEC_SIZE, SEEK_SET) != 0)
        {
        perror(NULL);
        return 2;
        }
 
    /* Read descriptor */
    if(fread(buf, 1, SEC_SIZE, in) != SEC_SIZE)
        {
        perror(NULL);
        return 2;
        }
 
    /* Caclculate disc id */
    printf("%08X\n", cdid(buf));
 
    return 0;
    }
 
 
проблема в том что допустим:
1)берем пустой диск(сд болванку)
2)пишем на нее что-то
3)смотрим идентификатор тома вышеприведенной функцией
4)затем заходим в windows и смотрим командой dir идентификатор тома 
Они совпадают
5)потом еще дозаписываем какую нибудь информацию на диск
6)смотрим идентификатор тома вышеприведенной функцией(идентификатор тома остался  такой же)
7)смотрим идентификатор тома в windows он изменился
так вот идентификатор тома диска меняется после каждой дозаписи в windows
но как мне определить смещение в выше приведенной программе
чтобы каждый раз номера в windows и в программе совпадали...