Модераторы: Alexeis
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Привязка программы к флешке, возможно ли? 
:(
    Опции темы
Experimenter
Дата 1.3.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: нет
Всего: 17



Доброго здоровья, уважаемые!

Собственно в теме и есть весь вопрос. Windows Mobile 5 и выше.
Нужно чтоб программа хранилась на флешке (miniSD) и запускалась только с нее.
Второй аспект вопроса - защита от копирования.
Можно ли с карты выдернуть какие-либо уникальные параметры?

Заранее благодарен.


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
Artemon
Дата 22.3.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 2
Всего: 20



Выдернуть можно, так например делают многие картографические программы для КПК, 
а как выдергивать сам ищи.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Experimenter
Дата 22.3.2008, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: нет
Всего: 17



Artemon, благодарю за подробнейший ответ. Поразительно все просто!!!


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
Artemon
Дата 23.3.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 2
Всего: 20



Это получение серийника устройства.

#include <WINIOCTL.H>

extern "C" __declspec(dllimport) 
BOOL KernelIoControl(
  DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize, 
  LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned
);

#define IOCTL_HAL_GET_DEVICEID CTL_CODE(FILE_DEVICE_HAL, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)

CString GetSerialNumberFromKernelIoControl()
{
    DWORD dwOutBytes;
    const int nBuffSize = 4096;
    byte arrOutBuff[nBuffSize];

    BOOL bRes = ::KernelIoControl(IOCTL_HAL_GET_DEVICEID, 
                                     0, 0, arrOutBuff, nBuffSize, &dwOutBytes);

    if (bRes) {
        CString strDeviceInfo;
        for (unsigned int i = 0; i<dwOutBytes; i++) {
            CString strNextChar;
            strNextChar.Format(TEXT("%02X"), arrOutBuff[i]);
            strDeviceInfo += strNextChar;
        }
        CString strDeviceId = 
            strDeviceInfo.Mid(40,2) + 
            strDeviceInfo.Mid(45,9) + 
            strDeviceInfo.Mid(70,6);

        return strDeviceId;
    } else {
        return _T("");
    }
}

Один чел у меня на работе, сломал программу для КПК, которая привязывалась именно к серийнику флэшки и если тебе сильно надо, могу у него спросить как он это расковырял


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Artemon
  Дата 24.3.2008, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 2
Всего: 20



Код

//------------------------------------------------------------------------------ 
// 
// Get the flash card serial number and save in passed in buffer. 
// 
//------------------------------------------------------------------------------ 
BOOL getSerialNumber(TCHAR* buf, UINT bufLength) 
{ 

        const UINT BBUF_LENGTH = 256; 
        const UINT STR_LENGTH = 256; 
        const UINT SERIAL_NUMBER_LENGTH = 12; 
        const UINT MANUFACTURER_ID_LENGTH = 24; 
        BOOL res = TRUE; 
        byte bbuf[BBUF_LENGTH]; 
        STORAGE_IDENTIFICATION* si; 
        HANDLE hCard = NULL; 
        ULONG dwNumReturned = 0; 
        ULONG err = 0; 

        // Make sure a card is inserted and found before attempting to read 
        // the serial number 
                // Clear the buffer 
                memset(bbuf, 0, BBUF_LENGTH); 

                // Clear the buffer 
                memset(buf, 0, bufLength * sizeof(TCHAR)); 

                // Set a STORAGE_IDENTIFICATION pointer to the buffer (overlaying the structure) 
                si = (STORAGE_IDENTIFICATION*)bbuf; 

                // Get a handle to the flash card (drive) volume 
                hCard = CreateFile(TEXT("\\SDMMC\\Vol:"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
//                hCard = CreateFile(TEXT("\\Storage Card\\Vol:"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

                // Set the size element of the STORAGE_IDENTIFICATION structure 
                si->dwSize = BBUF_LENGTH; 

                // Fill the STORAGE_IDENTIFICATION structure with the flash card info 
                if(DeviceIoControlNewA(hCard, IOCTL_DISK_GET_STORAGEID, (LPVOID)NULL, 0, 
                    si, BBUF_LENGTH, &dwNumReturned, NULL) == FALSE) 
                { 
                        err = GetLastError(); 
                        res = FALSE; 
                } 

                wsprintf(buf, L"Returned %d bytes\r\nMIDof %d\r\nSNof: %d\r\nSize: %d", dwNumReturned, si->dwManufactureIDOffest, si->dwSerialNumOffset, si->dwSize);
//                MessageBox(NULL,buf,L"Retutned",MB_OK);

                // Close the handle 
                CloseHandle (hCard); 

                // See if the serial number is valid.  If not, return false, otherwise get 
                // the serial number 
                if((si->dwFlags & SERIALNUM_INVALID) != SERIALNUM_INVALID) 
                { 
                        // Get a char pointer to the serial number in the byte array
                        CHAR* sn = (CHAR*)((UINT)si + si->dwSerialNumOffset); 
                        CHAR* mf = (CHAR*)((UINT)si + si->dwManufactureIDOffest);

                        if (si->dwManufactureIDOffest != 0)
                        {
                            mbstowcs(buf, mf, MANUFACTURER_ID_LENGTH); 
                            buf[MANUFACTURER_ID_LENGTH] = 0; 
                        }


                        res = atoi (sn);
                        // Covert the CHAR serial number to a TCHAR string 
//                        mbstowcs(buf, sn, SERIAL_NUMBER_LENGTH); 
//                        buf[SERIAL_NUMBER_LENGTH] = 0; 
                } 
                else 
                { 
                        // Serial number is not available 
                        _tcscpy(buf, _T("! NONE !")); 
                        res = FALSE; 
                } 

        return res;
}


"Поразительно все просто!!!" - очень просто, если пользоваться поиском. 


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование мобильных устройств"
Alexeis

Раздел посвящен программированию мобильных устройств.

Все остальные вопросы по мобильным устройствам (КПК, смартфоны, телефоны, фотоаппараты и т.п),
не имеющие отношения к программированию, просьба размещать в разделе КПК, смартфоны, мобильники

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Платформы Windows Mobile и Windows Embedded | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.