<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=276177&amp;view=findpost&amp;p=2301240</guid>
        <pubDate>Mon, 29 Jun 2009 15:40:13 +0000</pubDate>
        <title>Вопрос об использовании IMAPI</title>
        <link>https://forum.sources.ru/index.php?showtopic=276177&amp;view=findpost&amp;p=2301240</link>
        <description><![CDATA[_nic: Вот пытаюсь разобратся IMAPI нашол какой то исходник с японскими каментами http://blog-imgs-23.fc2.com/j/u/n/junktxt/imapiv1_01.html :rolleyes: Там к сожалению только получении информации о пишущих приводах.Покулапал тот исходник наваял свой<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;conio.h&#62;</div><div class="code_line">#include &#60;stdlib.h&#62;</div><div class="code_line">#include &#60;comutil.h&#62;</div><div class="code_line">#include &#60;Objbase.h&#62;</div><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">#include &#60;Imapi.h&#62;</div><div class="code_line">#include &#60;imapierror.h&#62;</div><div class="code_line"># pragma comment(lib, &quot;comsuppwd.lib&quot;)</div><div class="code_line">&nbsp;</div><div class="code_line">using namespace std;</div><div class="code_line">void dllt(char devp[1024],char drvlt[3])</div><div class="code_line">{</div><div class="code_line">char data[256];</div><div class="code_line">char disk[]=&quot;A:&quot;;</div><div class="code_line">for (int i=&#39;A&#39;; i&#60;=&#39;Z&#39;; i++)</div><div class="code_line">{</div><div class="code_line">&nbsp;disk[0] = i;</div><div class="code_line">&nbsp;QueryDosDeviceA(disk, data, 256);</div><div class="code_line">&nbsp;if(strcmp(data,devp)==0)</div><div class="code_line">&nbsp;{strcpy(drvlt,disk);break;}</div><div class="code_line">}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">int _tmain(int argc, _TCHAR* argv[])</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; &nbsp;ULONG fet;int i=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;HRESULT hr=0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDiscMaster *pDiskMaster= NULL;</div><div class="code_line">&nbsp;&nbsp; &nbsp;CoInitialize(NULL);</div><div class="code_line">&nbsp;&nbsp; &nbsp;hr = CoCreateInstance(CLSID_MSDiscMasterObj,NULL,CLSCTX_LOCAL_SERVER,IID_IDiscMaster,(PVOID*)&amp;pDiskMaster);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(hr!=S_OK){printf(&quot;%X&quot;,hr);getch();}</div><div class="code_line">&nbsp;&nbsp; &nbsp;pDiskMaster-&#62;Open();</div><div class="code_line">&nbsp;&nbsp; &nbsp;IEnumDiscRecorders* recordersEnum;</div><div class="code_line">&nbsp;&nbsp; &nbsp;IDiscRecorder* pRecorder;</div><div class="code_line">&nbsp;&nbsp; &nbsp;hr = pDiskMaster-&#62;EnumDiscRecorders(&amp;recordersEnum);</div><div class="code_line">&nbsp;&nbsp; &nbsp;char dbcc_name[1024],buf [10*1024];</div><div class="code_line">&nbsp;&nbsp; &nbsp;memset(dbcc_name,NULL,1024);memset(buf,NULL,1024*10);</div><div class="code_line">&nbsp;&nbsp; &nbsp;ULONG ulReturnSizeRequired;</div><div class="code_line">&nbsp;&nbsp; &nbsp;BSTR bstrVendorID=NULL, bstrProductID=NULL, bstrRevision=NULL,bstrPath=NULL;</div><div class="code_line">&nbsp;&nbsp; &nbsp;char DrvLet[1024];</div><div class="code_line">&nbsp;&nbsp; &nbsp;byte sessions;</div><div class="code_line">&nbsp;&nbsp; &nbsp;byte lasttrack;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ULONG ulstartaddress;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ULONG ulnextwritable;</div><div class="code_line">&nbsp;&nbsp; &nbsp;ULONG ulfreeblocks;</div><div class="code_line">&nbsp;&nbsp; &nbsp;long MediaType;</div><div class="code_line">&nbsp;&nbsp; &nbsp;long MediaFlags;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PROPSPEC &nbsp; &nbsp;iPropSpec[5];</div><div class="code_line">&nbsp;&nbsp; &nbsp;PROPVARIANT iPropVariant[5];</div><div class="code_line">&nbsp;&nbsp; &nbsp;IPropertyStorage *pPropertyStorage;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for(;;)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;recordersEnum-&#62;Next(1,&amp;pRecorder,&amp;fet);i++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(!pRecorder){break;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;pRecorder-&#62;GetRecorderGUID((byte*)dbcc_name,1024,&amp;ulReturnSizeRequired);</div><div class="code_line">&nbsp;&nbsp; &nbsp;hr=pRecorder-&#62;GetDisplayNames(&amp;bstrVendorID,&amp;bstrProductID,&amp;bstrRevision); </div><div class="code_line">&nbsp;&nbsp; &nbsp;if(hr!=S_OK){printf(&quot;%X&quot;,hr);getch();}</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout&#60;&#60;&quot;VEndor:&quot;&#60;&#60;_com_util::ConvertBSTRToString(bstrVendorID)&#60;&#60;endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout&#60;&#60;&quot;Device:&quot;&#60;&#60;_com_util::ConvertBSTRToString(bstrProductID)&#60;&#60;endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout&#60;&#60;&quot;Revision:&quot;&#60;&#60;_com_util::ConvertBSTRToString(bstrRevision)&#60;&#60;endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;pRecorder-&#62;GetPath(&amp;bstrPath);</div><div class="code_line">&nbsp;&nbsp; &nbsp;wsprintf(buf,_com_util::ConvertBSTRToString(bstrPath));</div><div class="code_line">&nbsp;&nbsp; &nbsp;dllt(buf,DrvLet);</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout&#60;&#60;DrvLet&#60;&#60;endl;</div><div class="code_line">&nbsp;&nbsp; &nbsp;hr = pRecorder-&#62;OpenExclusive();</div><div class="code_line">&nbsp;&nbsp; &nbsp;pRecorder-&#62;QueryMediaInfo(&amp;sessions,&amp;lasttrack,&amp;ulstartaddress,&amp;ulnextwritable,&amp;ulfreeblocks);</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;sessions:%d\n&quot;,sessions);</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;lasttrack:%d\n&quot;,lasttrack);</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;ulstartaddress:%d\n&quot;,ulstartaddress);</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;ulnextwritable:%d\n&quot;,ulnextwritable);</div><div class="code_line">&nbsp;&nbsp; &nbsp;printf(&quot;lfreeblocks:%d\n&quot;,ulfreeblocks);</div><div class="code_line">&nbsp;&nbsp; &nbsp;pRecorder-&#62;QueryMediaType(&amp;MediaType, &amp;MediaFlags);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(MediaType == MEDIA_CD_EXTRA)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;MediaType : MEDIA_CD_EXTRA\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if(MediaType == MEDIA_CD_I)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;MediaType : MEDIA_CD_I\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if(MediaType == MEDIA_CD_OTHER)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;MediaType : MEDIA_CD_OTHER\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if(MediaType == MEDIA_CD_ROM_XA)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;MediaType : MEDIA_CD_ROM_XA\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if(MediaType == MEDIA_CDDA_CDROM)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;MediaType : MEDIA_CDDA_CDROM\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else if(MediaType == MEDIA_SPECIAL)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;MediaType : MEDIA_SPECIAL\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;MediaFlags:&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(MediaFlags &amp; MEDIA_BLANK)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;MEDIA_BLANK, &quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(MediaFlags &amp; MEDIA_RW)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;MEDIA_RW, &quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(MediaFlags &amp; MEDIA_WRITABLE)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;MEDIA_WRITABLE, &quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;pRecorder-&#62;GetRecorderProperties(&amp;pPropertyStorage);</div><div class="code_line">&nbsp;&nbsp; &nbsp;int cnt = sizeof(iPropSpec) / sizeof(PROPSPEC);</div><div class="code_line">&nbsp;&nbsp; &nbsp;iPropSpec[0].ulKind = PRSPEC_LPWSTR;</div><div class="code_line">&nbsp;&nbsp; &nbsp;iPropSpec[0].lpwstr = L&quot;WriteSpeed&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;iPropSpec[1].ulKind = PRSPEC_LPWSTR;</div><div class="code_line">&nbsp;&nbsp; &nbsp;iPropSpec[1].lpwstr = L&quot;MaxWriteSpeed&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;iPropSpec[2].ulKind = PRSPEC_LPWSTR;</div><div class="code_line">&nbsp;&nbsp; &nbsp;iPropSpec[2].lpwstr = L&quot;EnableBufferUnderrunFree&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;iPropSpec[3].ulKind = PRSPEC_LPWSTR;</div><div class="code_line">&nbsp;&nbsp; &nbsp;iPropSpec[3].lpwstr = L&quot;BufferUnderrunFreeCapable&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;iPropSpec[4].ulKind = PRSPEC_LPWSTR;</div><div class="code_line">&nbsp;&nbsp; &nbsp;iPropSpec[4].lpwstr = L&quot;AudioGapSize&quot;;</div><div class="code_line">&nbsp;&nbsp; &nbsp;pPropertyStorage-&#62;ReadMultiple( cnt, iPropSpec, iPropVariant );</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(iPropVariant[0].vt == VT_I4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;WriteSpeed:%d\n&quot;, iPropVariant[0].lVal);</div><div class="code_line">&nbsp;&nbsp; &nbsp; if(iPropVariant[1].vt == VT_I4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;MaxWriteSpeed:%d\n&quot;, iPropVariant[1].lVal);</div><div class="code_line">&nbsp;&nbsp; &nbsp; if(iPropVariant[2].vt == VT_I4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;EnableBufferUnderrunFree:%d\n&quot;, iPropVariant[2].lVal);</div><div class="code_line">&nbsp;&nbsp; &nbsp; if(iPropVariant[3].vt == VT_BOOL)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(iPropVariant[3].boolVal == VARIANT_TRUE)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;BufferUnderrunFreeCapable : TRUE\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;BufferUnderrunFreeCapable : FALSE\n&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp; if(iPropVariant[4].vt == VT_I4)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;printf(&quot;AudioGapSize: %d\n&quot;, iPropVariant[4].lVal);</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;getch();</div><div class="code_line">&nbsp;&nbsp; &nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Теперь напрашивается вопрос IMAPI версии 1.х может коректно работать с DVD приводами? Да и ещё к сожалению я почти ненашол примеров по записи дисков  :wacko:  Кто нибудь может такой подсказать.В 1ю очередь меня интересует запись уже готовой исошки.]]></description>
        <author>_nic</author>
        <category>C/C++: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	